我正在使用 selenium 通過 pyhton 在一個非常動態的網站上自動執行任務。出于這個原因,當前加載頁面的某些 HTML 元素在我的代碼發出請求時可能存在也可能不存在。webdriver 實體究竟是如何更新并從網頁接收新資料的?
它是否經常連接并立即接收 HTML 代碼中的更改?
或者它在driver.get()被呼叫時首先下載頁面的第一個版本,然后在呼叫諸如此類的函式時更新它.find_element_by_class_name()?
uj5u.com熱心網友回復:
Q. 是否持續連接并立即接收 HTML 代碼中的更改?
答。好吧,對于每個Selenium command,都會有一個HTTP requestwillsend to the browser driver然后到服務器,命令將得到,HTTP 回應將被回傳,命令/命令將根據回應執行。
現在讓我們說在你做的情況下,
driver.get()
基本上,這是一個硒命令。
它會觸發an HTTP request宣告啟動URL provided. 根據response (200-Ok or anything else),您將看到網頁正在加載或出現錯誤訊息。
在 Sequence 中,所有 Selenium 命令都將以相同的方式執行。
很明顯,我們需要定位器來定位 UI 中的 Web 元素。
一旦我們有了它們,我們就可以將它們與
driver.find_element_by_***
方法。
這里需要注意的事項
你需要學習/理解:
- 隱式等待。
- 顯式等待。
- 流暢等待。
隱式等待:
通過隱式等待,WebDriver polls the DOM for a certain duration當試圖找到任何元素時。當網頁上的某些元素無法立即使用并且需要一些時間來加載時,這會很有用。
基本上它的意思是,每當你使用drive.find_element它時,如果你定義了一個隱式等待,它就會尋找隱式等待。
如果您尚未定義一個隱式等待,則默認值為 0。
顯式等待
他們允許你的 c ode to halt program execution, or freeze the thread, 直到你通過它的條件解決。以特定頻率呼叫條件,直到等待超時結束。這意味著只要condition returns a falsy value,它將繼續嘗試和等待。
流利等待
FluentWait 實體定義了等待條件的最長時間,以及檢查條件的頻率。
參考鏈接
更新 :
PS:請檢查dev tools(谷歌瀏覽器)我們是否有唯一的條目HTML DOM。
檢查步驟:
Press F12 in Chrome- >去element節- >做一個CTRL F- >再貼上xpath看看,如果你需要的element是越來越強調與1/1匹配的節點。
定位器(按優先級從上到下):
- ID
- 姓名
- 班級名稱
- 鏈接文本
- 部分鏈接文本
- 標簽名稱
- css 選擇器
- 路徑
uj5u.com熱心網友回復:
網頁由 加載driver.get()。
但是驅動程式不“知道”那里存在哪些元素。它只是打開,加載網頁。
要訪問任何元素,檢查元素是否存在等,您需要使用.find_element_by_class_name()特定元素定位器之類的命令對每個特定元素/元素執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344493.html
