在 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 應該是阻塞的,所以不確定這里發生了什么。
uj5u.com熱心網友回復:
這就是 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
uj5u.com熱心網友回復:
您可以使用以下代碼作為示例,等待您的站點完全加載并準備好進行操作。
myElem = WebDriverWait(driver, delay).until(EC.element_to_be_clickable((By.CLASS_NAME , 'bs_btn_buchen')))
uj5u.com熱心網友回復:
在get()瀏覽器向驅動程式發送'document.readyState' == "complete" 后立即呼叫時,Colab 會執行下一行沒有找到任何匹配項的代碼,因為DOM 樹完全沒有加載。因此,您會看到 Colab 回傳[]
要定位可見元素,您需要為visibility_of_all_elements_located()引入WebDriverWait,您可以使用以下任一定位器策略:
使用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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/384016.html
標籤:Python 硒 网络爬虫 网络驱动程序等待 预期条件
