當在以下網站上的搜索失敗時,會為錯誤打開一個小的模式對話框,但我的代碼找不到我在源代碼中看到的“id=noresultsfound”HTML:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(
"/Users/bob/Documents/work/AIFA/scraper/scrape_gu/chromedriver"
)
# navigate through the initial agreement screens
driver.get("https://farmaci.agenziafarmaco.gov.it/bancadatifarmaci/cerca-farmaco")
readunderstood = driver.find_element_by_id("conf")
readunderstood.click()
accept = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "/html/body/div[5]/div[3]/div/button"))
)
accept.click()
# end of the initial agreement screens
# now input search string
find_textbox = driver.find_element_by_id("search")
find_textbox.send_keys("ZQ")
find_textbox.send_keys(Keys.ENTER)
# check if any results found
# if not we have //*[@id="noresultsfound"]
try:
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.ID, "noresultsfound"))
)
finally:
driver.quit()
當然,感興趣的代碼是在#check if any results found 注釋之后出現的。
當然,我還需要單擊 OK 按鈕將其關閉,但是當我能夠找到模態視窗時,我猜這也是可行的。
代碼可以按原樣運行。
uj5u.com熱心網友回復:
該Ok元素位于模態對話框中。要在可點擊元素上單擊() ,需要為element_to_be_clickable()誘導WebDriverWait,您可以使用以下任一定位器策略:
使用CSS_SELECTOR:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.ui-dialog-buttonset span.ui-button-text"))).click()使用XPATH:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='ui-button-text' and text()='Ok']"))).click()注意:您必須添加以下匯入:
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/qiye/420605.html
標籤:
