一 前言
環境: window 10
python3.10 selenium 4.21
隨便記錄一些容易犯錯或理解錯誤或比較有意思的一些點
二 內容
1 關於驅動webdiver的下載使用
以前通常是,根據瀏覽器的版本下載好合適的瀏覽器驅動到本地電腦,然後使用的時候配置好驅動路徑
如下:
chromedriver_path = r"D:\xxxxxxxxx" # 這裡替換為你下載的webdriver的路徑
service = Service(chromedriver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)
前端時間發現這個版本有個方法能自動下載配置合適的驅動,再也不用手動去下載驅動了,
之前隔一段時間去執行程式碼都報錯,原因就是瀏覽器更新了,要重新下載合適的驅動
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
具體是從哪一個版本開始可以這樣使用沒去細究,以前3的時候好像沒這種用法
這種方法啟動瀏覽器之前的等待時間好像比手動下載的方法時間要長一丟丟
2 關於異常的處理
try:
xxxxx
element = driver.find_element(xxxxx)
except Exception as e:
xxxxx正式的業務處理邏輯xxx
如上一段虛擬碼,想在找不到某個元素的時候寫處理邏輯,但Exception捕獲的範圍太大了,它不僅能捕獲元素未找到的異常,還能捕獲很多其他的程式碼異常,如果是其它異常,這就不是我們想要的了,因此最好是明確捕獲元素未找到的一場NoSuchElementException
try:
xxxxx
element = driver.find_element(xxxxx)
except NoSuchElementException as e:
xxxxx正式的業務處理邏輯xxx
3 關於頁面元素不可點選
判斷一個元素是否可點選,有種常用的方法是
#如果沒有丟擲異常,說明元素可點選
element = wait.until(EC.element_to_be_clickable((By.xx, xxxxx)))
但有時候,這個方法也不管用,如在豆瓣讀書上 點選下一頁的時候
不斷點選[後頁]按鈕,來跳轉到新的一頁,當其不可點選時,
try:
wait2 = WebDriverWait(driver, 1)
page_wait = wait2.until(EC.element_to_be_clickable((By.XPATH, '//*[@class="next"]')))
logger.info(f'page: {page_wait}')
next_button = driver.find_element(By.XPATH, '//*[@class="next"]')
next_button.click()
except Exception as e:
logger.info(f"點選下一頁出現異常")
raise