我嘗試了很多方法來查找元素,但檢索到的元素給了我一個空串列。這是頁面: https ://www.avocatparis.org/annuaire 我嘗試找到“nom”輸入表單。當我復制 xpath 我得到
//*[@id="_ctl0_Corps_txtRSNom"]
當我復制完整的 xpath 我得到
/html/body/form/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td/div/div/div[2]/table/tbody/tr[1]/td[2]/input
當我把它放到我的代碼中時:
input = self.driver.find_elements(by=By.XPATH,value='//*[@id="_ctl0_Corps_txtRSNom"]')
我得到一個空串列。
我錯過了什么嗎?
謝謝你。
uj5u.com熱心網友回復:
新的
所需的元素在 a 內<iframe>,因此您必須使用WebDriverWait等待 iframe 可用,然后切換到它。然后您可以使用通常的find_elements命令獲取元素。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver.get('https://www.avocatparis.org/annuaire')
WebDriverWait(driver, 30).until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe")))
element = driver.find_elements(By.XPATH, '//*[@id="_ctl0_Corps_txtRSNom"]')
print(len(element))
你會看到列印的是1.
老的
這不是一個真正的答案,因為它不能解決問題,但是寫在評論中太長了。
通過檢查 selenium 下載的 HTML 的文本版本(見下文),結果發現它缺少許多通過手動打開瀏覽器的檢查器工具找到的 HTML。特別是table包含您感興趣的元素,即#Table4,不包含在 selenium 頁面源中。我想這是與某些 javascript 未加載有關的問題。我用chrome和firefox都試過了。
查看 selenium 頁面源運行
print(driver.page_source)
然后搜索<table(CTRL F)你會看到只有5個結果,都是和CookiebotDialog相關的。相反,如果您進入瀏覽器檢查器工具并搜索//table,您將看到 11 個結果。
如果我找到了讓 selenium 下載完整 HTML 代碼的方法,我會更新答案。
來自硒檔案
WebDriver 獲取最后加載頁面的來源。如果頁面在加載后被修改(例如,通過 Javascript),則不能保證回傳的文本就是修改后的頁面的文本。請查閱所使用的特定驅動程式的檔案,以確定回傳的文本是反映頁面的當前狀態還是 Web 服務器上次發送的文本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/478794.html
下一篇:將所有選項標簽更改為相同的值
