我正在構建一個網路爬蟲,它遍歷地址串列并在房地產網站上搜索它們。然后,它會根據我們已經知道的有關房產的資訊更新一些下拉串列,然后再抓取各種資訊,例如預期的租金收益。
搜索完每個地址后,所需的元素(例如,'bathrooms_dropdown')可能需要一些時間才能加載到網站上。我一直在使用它進行管理,time.sleep(x)但這很慢且不可靠,并且implictly_wait(60)似乎沒有任何效果,因為我仍然經常收到“元素不存在/找不到”錯誤。
我確定我需要實作 WebDriverWait 但在將其實作到我的代碼中時無法確定語法。我沒有看到與此結合使用的示例driver.find_elements()
任何幫助將不勝感激!
driver.get(url)
driver.implicitly_wait(60)
# find search bar and search for address
searchBar = driver.find_element(by = By.ID, value = 'react-select-3-input')
searchBar.send_keys(address)
searchButton = driver.find_element(By.CLASS_NAME, value='sc-1mx0n6y-0').click()
# wait for elements to load
time.sleep(3) # REPLACE THIS
# find dropdown and click to open it
bathrooms_dropdown = driver.find_elements(By.CLASS_NAME, value = 'css-19bqh2r')[-2]
bathrooms_dropdown.click()
uj5u.com熱心網友回復:
您需要注意以下幾點:
由于searchBar元素是理想的可點擊元素,因此您需要為element_to_be_clickable()誘導WebDriverWait ,如下所示:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "react-select-3-input"))).send_keys(address)同樣,由于searchButton元素是一個可點擊的元素,您需要為element_to_be_clickable()引入WebDriverWait ,如下所示(在最壞的情況下,假設在填充搜索文本時啟用了 searchButton):
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, "sc-1mx0n6y-0"))).click()理想的下拉選單是html-選擇標記,理想情況下,您應該使用Select類來誘導WebDriverWait,如下所示:
Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "cssSelector_select_element")))).select_by_visible_text("visible_text")最后,您使用的值
ID和CLASS_NAME值,例如react-select-3-input、sc-1mx0n6y-0、css-19bqh2r等,看起來是動態的,并且在您重新訪問應用程式時或在短時間內可能會發生變化。因此,您可能會選擇尋找其他一些靜態屬性。注意:您必須添加以下匯入:
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/qukuanlian/473994.html
標籤:Python 硒 硒网络驱动程序 网络驱动程序等待 预期条件
