![](/img/trans.png)
[英]How to get innerHTML of find_elements (not find_element) with Selenium
[英]Selenium find_elements only works if time passes since get()
在 Colab 中同時運行這兩行會返回[]
:
wd.get("https://wetransfer.com/")
wd.find_elements(By.CSS_SELECTOR, 'input[type=file]')
但是,運行一個,然后運行另一個會返回預期結果:
[<selenium.webdriver.remote.webelement.WebElement (session="3cdfb3afbb591862e909cd406b6ac523", element="19fd31e8-710a-4b6e-8284-9a7409f12718")>,
<selenium.webdriver.remote.webelement.WebElement (session="3cdfb3afbb591862e909cd406b6ac523", element="837097d1-5735-4b24-9cb2-9d3ded3a0311")>]
Get 應該是阻塞的,所以不確定這里發生了什么。
在瀏覽器向驅動程序發送'document.readyState' == "complete"后立即調用get()
時,Colab 會執行下一行代碼,因為DOM 樹尚未完全加載,因此找不到任何匹配項。 因此,您會看到 Colab 返回[]
要定位可見元素,您需要為visibility_of_all_elements_located()誘導WebDriverWait ,您可以使用以下任一Locator Strategies :
使用CSS_SELECTOR :
elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "input[type=file]")))
使用XPATH :
elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//input[@type=file]")))
注意:您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
您可以使用以下代碼作為示例,等待站點完全加載並准備好進行操作。
myElem = WebDriverWait(driver, delay).until(EC.element_to_be_clickable((By.CLASS_NAME , 'bs_btn_buchen')))
這就是 Selenium 的工作原理。
只有在完全加載后,它才能訪問 web 元素。
這就是我們在這里隱式和顯式使用等待的原因。
更推薦顯式等待。
所以而不是
wd.get("https://wetransfer.com/")
wd.find_elements(By.CSS_SELECTOR, 'input[type=file]')
你應該使用這樣的東西:
wd.get("https://wetransfer.com/")
wait = WebDriverWait(wd, 20)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[type=file]")))
wd.find_elements(By.CSS_SELECTOR, 'input[type=file]')
要使用它,您必須導入這些導入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.