Selenium Element.get_attribute 偶尔会失败
Selenium Element.get_attribute occasionally failing
鉴于此代码:
options = webdriver.ChromeOptions()
options.add_argument("headless")
driver = webdriver.Chrome(options=options)
driver.get('https://covid19.apple.com/mobility')
elements = driver.find_elements_by_css_selector("div.download-button-container a")
csvLink = [el.get_attribute("href") for el in elements]
driver.quit()
最后,csvLink 有时有 link 而大多数时候没有。如果我停在调试器的最后一行,它通常无法在 csvlink 中包含任何内容,但如果我手动执行(在调试器中)elements[0].get_attribute('href')
,则会返回正确的 link。每一次。
如果我替换
csvLink = [el.get_attribute("href") for el in elements]
直接调用 -
csvLink = elements[0].get_attribute("href")
它也失败了。但是,如果我停在 driver.quit()
行并手动执行,则会返回正确的 link。
在使用 Selenium 时是否存在我不知道的时间或路径依赖性?
我猜这与 javascript 加载 link 的方式和时间有关。在 javascript 能够加载元素 href
属性值之前,Selenium 无需等待就可以获取它。尝试显式等待选择器,例如:
(
WebDriverWait(browser, 20)
.until(EC.presence_of_element_located(
(By.CSS_SELECTOR, "div.download-button-container a[href]")))
.click()
)
参考:
- Selenium - wait until element is present, visible and interactable
- How do I target elements with an attribute that has any value in CSS?
此外,如果您 curl https://covid19.apple.com/mobility
我怀疑该元素存在(可能),但 href 为空?
鉴于此代码:
options = webdriver.ChromeOptions()
options.add_argument("headless")
driver = webdriver.Chrome(options=options)
driver.get('https://covid19.apple.com/mobility')
elements = driver.find_elements_by_css_selector("div.download-button-container a")
csvLink = [el.get_attribute("href") for el in elements]
driver.quit()
最后,csvLink 有时有 link 而大多数时候没有。如果我停在调试器的最后一行,它通常无法在 csvlink 中包含任何内容,但如果我手动执行(在调试器中)elements[0].get_attribute('href')
,则会返回正确的 link。每一次。
如果我替换
csvLink = [el.get_attribute("href") for el in elements]
直接调用 -
csvLink = elements[0].get_attribute("href")
它也失败了。但是,如果我停在 driver.quit()
行并手动执行,则会返回正确的 link。
在使用 Selenium 时是否存在我不知道的时间或路径依赖性?
我猜这与 javascript 加载 link 的方式和时间有关。在 javascript 能够加载元素 href
属性值之前,Selenium 无需等待就可以获取它。尝试显式等待选择器,例如:
(
WebDriverWait(browser, 20)
.until(EC.presence_of_element_located(
(By.CSS_SELECTOR, "div.download-button-container a[href]")))
.click()
)
参考:
- Selenium - wait until element is present, visible and interactable
- How do I target elements with an attribute that has any value in CSS?
此外,如果您 curl https://covid19.apple.com/mobility
我怀疑该元素存在(可能),但 href 为空?