1. 程式人生 > 實用技巧 >Game of Life

Game of Life

答疑 qq:3081655843

公號: 天樞子python課堂


Selenium常見異常解析及解決方案示範

1、pycharm 中匯入 selenium 報錯

現象: pycharm 中輸 入 from selenium import webdriver, selenium 標紅

原因1: pycharm 使用的虛擬環境中沒有安裝 selenium

解決方法: 在 pycharm 中通過設定或 terminal 面板重新安裝 selenium

原因2: 當前專案下有 selenium.py 或名為 selenium 的資料夾, 和系統包名衝突導致,

解決方法, 重新命名這個檔案(禁止使用關鍵字為自己的專案、檔案、變數命名)

2、驅動或本地服務異常

現象

未找到響應的瀏覽器驅動

WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

WebDriverException: Message: 'chromedriver' executable needs to be in PATH.

原因: 查詢不到對應的瀏覽器驅動

解決方法: 下載瀏覽器對應版本的chromedriver或geckodrivergeckodriver

放到腳本當前資料夾下或將路徑配置到環境變數中, 或放到 Python 目錄的 Scripts 下(一般情況下Python的Scripts目錄在環境變數中), 或使用瀏覽器選項 options 指定驅動路徑

環境安裝詳細教程-->https://articles.zsxq.com/id_zxu9cw8pqhng.html

3、驅動和瀏覽器不匹配

現象(最後的數字可能不一樣):SessionNotCreatedException: Message: session not created:this version of ChromeDriver only supports Chrome version 76

原因: 當前使用 chromedriver 只支援 Chrome76 版本

​解決方法: 檢視本地 Chrome 瀏覽器的版本, 下載對應的 chromedriver​

環境安裝詳細教程-->

https://articles.zsxq.com/id_zxu9cw8pqhng.html

4、驅動被防火牆攔截

現象:WebDriverException: Message: Can not connect to the Servicechromedriver.exe

原因:chromedriver.exe 被防火牆攔截

解決方法:設定防火牆允許

5、連線不上 Chromedriver 服務

現象:WebDriverException: Message: Can not connect ot the Service chromedriver

原因:指令碼通過 127.0.0.1 這個 ip 訪問本地 chromedriver 服務, hosts 檔案中未配置 127.0.0.1 指向 localhost

​解決辦法: 配置本地 hosts, 新增: 127.0.0.1 localhost

6、RemoteDriverServerException: 遠端伺服器異常

現象:報錯RemoteDriverServerException

原因:當瀏覽器功能的錯誤組合/欄位導致伺服器不傳送響應時,將引發此異常

解決方案:確認 webdriver.Remote() 中的遠端 Webdriver 服務

7、ErrorInResponseException

現象:報錯ErrorInResponseException

原因:Webdriver伺服器響應異常

解決方法:這個要根據具體報錯資訊分析

8、各種找不到

  1. NoSuchElementException: 找不到元素, 解決方法: 前面加上sleep等待後重試,或換一種定位方式
  2. NoSuchAttributeException: 元素沒有這個屬性, 解決方法: 確認定位到的元素是否目標元素, 檢查屬性拼寫
  3. NoAlertPresentException:沒有找到alert彈出框, 解決方法: 觀察頁面,檢視是否有彈框出現, 加上等待或作為偶現元素處理
  4. NoSuchFrameException:沒有找到指定的frame或iframe, 解決方法: 檢視拼寫或切換使用frame的id/name/index/定位到的frame
  5. NoSuchWindowException: 沒找到視窗控制代碼指定的視窗, 解決方法: 檢視使用的視窗控制代碼變數拼寫
  6. UnexpectedAlertPresentException: 出現了彈框而未處理, 解決方法: 切換到警告框並處理, 如果偶現,使用try...except處理偶現彈框
  7. InvalidSwitchToTargetException: 切換到指定frame或視窗報錯, 解決方法: 檢視相應的frame或視窗是否能定位到
  8. UnexpectedTagNameException: 使用Tag Name不合法, 解決方法: 檢查拼寫或使用css selector/xpath
  9. TimeoutException:查詢元素或操作超時, 解決方法, 稍後重試

9、元素操作異常

  1. ElementNotVisibleException:元素不可見異常, selenium不能直接操作隱藏元素, 解決方法: 加上等待, 使用正常步驟使元素顯示, 或使用js找到該元素的祖先節點的隱藏屬性(通常為styple="display: none"), 移除該屬性然後定位操作.
  2. StaleElementReferenceException: 陳舊元素引用異常, 頁面重新整理或跳轉後使用了之前定位到的元素, 解決方法: 重新定位元素並操作
  3. InvalidElementStateException: 元素狀態異常 元素只讀/不可點選等, 解決方法, 等待或使用js移除元素readonly/disable等限制屬性後操作
  4. ElementNotSelectableException:元素不可被選中, 解決方法: 確認原始是否為select標籤, 是否禁用
  5. InvalidSelectorException: 使用的定位方法不支援或xpath語法錯誤, 未返回元素, 解決方法: 檢查使用的元素定位器是否拆包, 使用find_element()方法是, 第一個引數為'class name', 'link text', 'particial link text' 'css selector', 空格分開, 非下劃線連線, 建議使用By.CLASS_NAME的方式. 使用chrome開發著工具+Ctrl+F搜尋驗證自己寫的xpath語法.
  6. MoveTargetOutOfBoundsException: 使用ActionChains的move方法時移動到的位置不合適