各位大大好,我這幾天才剛接觸爬蟲,都是在網路上找資料自學的,卡了很多地方最後都能解決,唯獨執行全部程式碼後Chrome會自動關閉問題(剛開始用前幾次不會,之後不管做什麼事都會自動關閉)一直不能解決,請問各位大大可能是們麼原因?先謝謝各位大大了!
以下附上版本號:
Chrome : 101.0.4951.67 (正式版本) (64 位元)
ChromeDriver : 101.0.4951.41
以下附上我的程式碼(在IG用關鍵字下載圖片):
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import os
import wget
path = "D:/chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get("https://www.instagram.com/")
print(driver.title)
#會等瀏覽器10秒鐘,直到XXX(By後的條件)可以被點擊為止
username = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, "KPnG0"))
)
#---------------------------------------用FB登入-------------------------------------------------
login = driver.find_element(by=By.XPATH, value='//*[@id="loginForm"]/div/div[5]/button/span[2]')
login.click()
#---------------------等帳號欄位可點擊------------------------
username = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "email"))
)
#---------------------等密碼欄位可點擊------------------------
password = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "pass"))
)
login_FB = driver.find_element(by=By.XPATH, value='//*[@id="loginbutton"]')
username.clear() #清空帳號
password.clear() #清空密碼
username.send_keys('xxxxx@gmail.com') #輸入帳號
password.send_keys('xxxxx') #輸入密碼
login_FB.click() #點擊登入
#---------------------等搜尋欄位可點擊------------------------
search = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, "XTCLo"))
)
keyword = '#cat'
search.send_keys(keyword) #搜尋cat
time.sleep(1) #等待1秒
search.send_keys(Keys.RETURN) #按下enter鍵
time.sleep(1) #等待1秒
search.send_keys(Keys.RETURN) #按下enter鍵
time.sleep(5) #等待5秒(如果不等5秒,執行完第二次search.send_keys(Keys.RETURN)就會閃退,並且下載的圖片是搜尋cat結果之前的頁面的圖)
#---------------------等圖片可點擊------------------------
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "FFVAD"))
)
#滾軸下拉5次
for i in range(5):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
imgs = driver.find_elements(by=By.CLASS_NAME, value="FFVAD")
path = os.path.join(keyword)
os.mkdir(path) #建資料夾
#下載圖片
count = 0
for img in imgs:
save_as = os.path.join(path, keyword + str(count) + '.jpg')
wget.download(img.get_attribute("src"), save_as)
count += 1
終端機訊息 :
PS D:\xampp\htdocs\website_test> & D:/ProgramData/Anaconda3/python.exe d:/xampp/htdocs/website_test/py_test2.py
d:\xampp\htdocs\website_test\py_test2.py:24: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(path)
DevTools listening on ws://127.0.0.1:62490/devtools/browser/1fada151-04b0-48e8-879a-7af83530ff04
Instagram
[6864:22832:0513/132954.606:ERROR:device_event_log_impl.cc(214)] [13:29:54.606] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: 連結到系統的某個裝置
失去作用。 (0x1F)
[6864:22832:0513/132954.609:ERROR:device_event_log_impl.cc(214)] [13:29:54.609] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: 連結到系統的某個裝置
失去作用。 (0x1F)
100% [..............................................................................] 62177 / 62177
如果還缺什麼資料麻煩大大告知,萬分感謝!
那個 webdriver 在程式最後有關閉嗎?
https://www.zyxware.com/articles/5552/what-is-close-and-quit-commands-in-selenium-webdriver
當開啟後沒關閉
多開幾個後會閃退
還是 砍了也行 :)
os.system('taskkill /im chromedriver.exe /F')
os.system('taskkill /im chrome.exe /F')
就個人經驗來講 wedriver 在事情做完或是遇到程式碼錯誤 or 連線錯誤的時候會自動關閉,quit() 只是用來 確保他有關閉,或許你可以每一行都單獨執行看看,看有沒有其他錯誤