以下作業代碼顯示我能夠從 Webelement 中檢索文本,但不能從 href(回傳 None)。我究竟做錯了什么?沒有按預期作業的代碼行是倒數第二個:
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"
)
wait = WebDriverWait(driver, 30)
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 and general preparation
##############################################################
SEARCH_STRING = "AB" # we can safely assume this does not exist
find_textbox = driver.find_element_by_id("search")
find_textbox.clear() # after the first search the old value will still be there
find_textbox.send_keys(SEARCH_STRING)
find_textbox.send_keys(Keys.ENTER)
# end of the search for a drug action
##############################################################
drugs_list = wait.until(
EC.presence_of_all_elements_located(
(By.XPATH, "//*[@id='ul_farm_results']/li[@style='display: list-item;']",)
)
)
###### this is the part I don't understand
for drug in drugs_list:
print(drug.get_attribute("href")) # this should return a link, but returns None
print(drug.text) # this correctly prints 3 lines per drug
uj5u.com熱心網友回復:
href鏈接不包含在您通過定位器獲取的元素中,而是包含在它們的子元素中a。
因此,要使您的代碼按預期作業,您只需調整定位器。
請試試這個:
drugs_list = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//*[@id='ul_farm_results']/li[@style='display: list-item;']/a")))
for drug in drugs_list:
print(drug.get_attribute("href"))
print(drug.text)
我還建議您使用visibility_of_element_located預期條件而不是presence_of_all_elements_located因為visibility_of_element_located將等待更成熟的元素狀態,不僅元素的存在(雖然它們可能仍未完全渲染)而且元素已完全渲染和可見。
在這種情況下,您的代碼可能如下所示:
the_xpath = "//*[@id='ul_farm_results']/li[@style='display: list-item;']/a"
wait.until(EC.visibility_of_element_located((By.XPATH, the_xpath)))
drugs_list = driver.find_elements(By.XPATH, the_xpath)
for drug in drugs_list:
print(drug.get_attribute("href"))
print(drug.text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/421567.html
標籤:
下一篇:XPath:如何捕獲前一個元素?
