【问题标题】:Selenium won't see elements unless I manually resize the window除非我手动调整窗口大小,否则 Selenium 不会看到元素
【发布时间】:2016-06-23 09:16:24
【问题描述】:

所需元素之一位于页面的右上角,除非我手动调整窗口大小以使元素存在,否则 selenium 将看不到它。如果我这样做,一切正常。 Selenium 将找到该元素,单击它,然后执行我希望它执行的操作。这是我在 python 中的代码

wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@id='15_button']")))
num_list = driver.find_element_by_xpath("//input[@id='15_button']")
num_list.click()

我尝试使用

调整窗口大小
driver = webdriver.Chrome()
driver.set_window_size(1024, 1024)
driver.maximize_window()

这确实使元素在浏览器启动时可见,但随后 Selenium 给出了错误

Message: unknown error: Element is not clickable at point (1206, 719). Other element would receive the click: <li id="15_input_5" class="selected">...</li>

有人知道怎么解决吗?

非常感谢!

【问题讨论】:

    标签: python selenium selenium-chromedriver


    【解决方案1】:

    该错误意味着有一个不同的element 覆盖了您尝试点击的element。如果 Selenium 试图点击它,点击实际上会发生在覆盖它的元素上,因此它会抛出这个错误。您可以使用javascript 来点击它,这样element 是否被覆盖并不重要。

    num_list = driver.find_element_by_xpath("//input[@id='15_button']")
    driver.execute_script("arguments[0].click();", num_list)
    

    给你的另一个提示。在您正在执行的代码示例中:

    wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@id='15_button']")))
    num_list = driver.find_element_by_xpath("//input[@id='15_button']")
    

    wait.until() 将在确定元素可点击后返回该元素。所以你可以像这样摆脱第二个find

    num_list = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@id='15_button']")))
    

    【讨论】:

    • 您通常希望以用户的方式与网站进行交互。使用 JS 直接单击隐藏元素通常不是一个好习惯,因为用户不能这样做。找出隐藏元素的原因并将其关闭,或者您可能只需要短暂等待元素出现/消失。
    • wait.until() 提示是一个很好的提示,但您可以更进一步,将 .click() 添加到行尾,根本不需要将元素存储在 num_list 中。
    猜你喜欢
    • 2023-03-24
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多