【问题标题】:Selenium explicit wait doesnt workSelenium 显式等待不起作用
【发布时间】:2017-10-11 04:35:41
【问题描述】:

我有一个代码告诉 Selenium 等到一个元素可点击,但出于某种原因,Selenium 不会等待,而是点击该元素并立即在点 (x, y) 引发不可点击。知道如何解决这个问题吗?

x = '//*[@id="arrow-r"]/i'
driver = webdriver.Chrome(path)
driver.get('https://www.inc.com/inc5000/list/2017')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, x)))
driver.find_element_by_xpath(x).click()

【问题讨论】:

  • 什么是EC类?
  • @cezarypiatek 预期条件
  • EC.element_to_be_clickable 检查元素是否可见并启用。就可见性而言,它不包括元素落后于其他元素的场景。也许您的页面使用了类似 blockUI 小部件的东西,并且 click() 在封面消失之前发生。
  • @cezarypiatek 所以我应该等到弹出广告消失然后点击元素吗?
  • 是的,当然。有一个专门的 EC 方法可以检查元素是否不可见。您应该针对弹出元素添加此检查。

标签: python selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

EC.element_to_be_clickable 检查元素是否可见并启用。就可见性而言,它不包括元素落后于其他元素的场景。也许您的页面使用了类似 blockUI 小部件的东西,并且 click() 在封面消失之前发生。您可以通过丰富 EC.element_to_be_clickable((By.XPATH, x)) 检查元素是否真正可点击,并使用确保元素不落后于其他元素的断言进行检查。在我的项目中,我使用如下实现:

static bool IsElementClickable(this RemoteWebDriver driver, IWebElement element)
{
    return (bool)driver.ExecuteScript(@"
            (function(element){
                var rec = element.getBoundingClientRect();
                var elementAtPosition = document.elementFromPoint(rec.left+rec.width/2, rec.top+rec.height/2);
                return element == elementAtPosition || element.contains(elementAtPosition);
            })(arguments[0]);
    ", element);
}

这段代码是用 C# 编写的,但我相信您可以轻松地将其翻译成您选择的编程语言。

更新: 我写了一篇关于点击 selenium 框架 https://cezarypiatek.github.io/post/why-click-with-selenium-so-hard/ 相关问题的博文

【讨论】:

    【解决方案2】:

    这里是 Python Selenium 文档“等待”部分的链接:Click here

    等待会是这样的:

    element = WebDriverWait(driver, 10).until(
        EC.visibility_of((By.XPATH, "Your xpath"))
    )
    element.click();
    

    【讨论】:

    • 你能分享你为你的项目打开的链接吗?
    • 试试这个 XPath //div[@id='arrow-r']/i 并增加时间 30
    • 这不是好方法,但试试这个 time.sleep(20) 如果它不起作用,那么我猜分页不会显示在屏幕上,那么你可以使用 driver.execute_script(" window.scrollTo(0, document.body.scrollHeight);")
    • time.sleep(20) 工作,但我不能将它用于分页,因为单击下一步按钮后,驱动程序中的 html 内容不会随之改变。
    • 我不认为睡眠可以与您的页面html正文交互
    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2013-11-15
    • 2022-06-22
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多