如何使用 selenium 单击图像 link 导致 TimeoutException 错误
How to click on an image link using selenium resulting in TimeoutException error
我正在尝试使用 Selenium 单击在 Flickr 中针对给定搜索出现的第一张图片,如代码所示:
image = WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, "//div[starts-with(@style,'transform: translate(0px, 0px)')]//a[@role='heading']")))
image.click()
我已经尝试在 python 的 IDLE 中一步一步地完成它并且它工作完美但是当我 运行 脚本时它引发了一个 TimeoutException
就好像 webelement 从不变得可点击。
知道我做错了什么吗?
它不可点击,因为该元素与其他元素重叠,需要 hover
才能使 <a>
元素可点击,简单的解决方案是将条件更改为 .presence_of_element_located()
根据 HTML DOM within the url 使用 Selenium 单击出现在 Flickr 中的给定搜索的第一张图像,而不是使用 style 属性我建议使用比较靠谱的属性如下:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.view.photo-list-view>div.view.photo-list-photo-view.awake a.overlay[href*='photos']"))).click()
使用XPATH
:
WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='view photo-list-view']/div[@class='view photo-list-photo-view awake']//a[@class='overlay' and @role='heading'][contains(@href, 'photos')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我正在尝试使用 Selenium 单击在 Flickr 中针对给定搜索出现的第一张图片,如代码所示:
image = WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, "//div[starts-with(@style,'transform: translate(0px, 0px)')]//a[@role='heading']")))
image.click()
我已经尝试在 python 的 IDLE 中一步一步地完成它并且它工作完美但是当我 运行 脚本时它引发了一个 TimeoutException
就好像 webelement 从不变得可点击。
知道我做错了什么吗?
它不可点击,因为该元素与其他元素重叠,需要 hover
才能使 <a>
元素可点击,简单的解决方案是将条件更改为 .presence_of_element_located()
根据 HTML DOM within the url 使用 Selenium 单击出现在 Flickr 中的给定搜索的第一张图像,而不是使用 style 属性我建议使用比较靠谱的属性如下:
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.view.photo-list-view>div.view.photo-list-photo-view.awake a.overlay[href*='photos']"))).click()
使用
XPATH
:WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='view photo-list-view']/div[@class='view photo-list-photo-view awake']//a[@class='overlay' and @role='heading'][contains(@href, 'photos')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC