如何使用硒单击图像链接导致TimeoutException错误

时间:2018-12-26 01:22:23

标签: python selenium webdriverwait

我试图单击使用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永远不会被点击。 知道我在做什么错吗?

2 个答案:

答案 0 :(得分:1)

它不可点击,因为该元素与其他元素重叠并且需要hover才能使<a>元素可点击,简单的解决方案是将条件更改为.presence_of_element_located()

答案 1 :(得分:1)

根据HTML DOM中的url ,单击使用Selenium而不是使用 style 属性在Flickr中针对给定搜索显示的第一张图像使用如下更可靠的属性:

  • 使用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