【问题标题】:Selenium click causes page to pop up error landing pageSelenium 点击导致页面弹出错误登陆页面
【发布时间】:2020-09-21 13:02:31
【问题描述】:

通过 xpath 点击元素:

self.browser.find_element_by_xpath(xpath).click()

或者用js:

self.browser.execute_script("arguments[0].click();", self.browser.find_element_by_xpath(xpath))

在我正在测试的页面上,如果使用任一选项完成点击,则会显示错误登录页面,但如果我设置了 20 秒的超时时间并手动点击按钮,页面将显示所有内容,没有问题,没有弹出错误页面。

有人遇到过这种问题吗?

【问题讨论】:

  • 如果在点击之前加个睡眠会怎么样,time.sleep(20)
  • 这样做了,只是为了我自己可以点击它,然后让它运行,似乎 chrome 正在做一些奇怪的事情,即使我清除了缓存和所有内容

标签: javascript python php html selenium


【解决方案1】:

您可以考虑使用以下函数:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException


def test_for_clickability(driver, by_type, by_value, wait_time=0):
    try:
        return WebDriverWait(driver, wait_time).until(EC.element_to_be_clickable((by_type, by_value))), True
    except TimeoutException:
        try:
            return WebDriverWait(driver, 0).until(EC.visibility_of((by_type, by_value))), FALSE
        except Exception:
            return (None, False)

例如:

element, clickable = test_for_clickability(driver, By.XPATH, xpath, wait_time=20)

上面将等待最多 20 秒以尝试通过其 XPATH 查找元素。如果找不到,element 值将返回为None。如果不是None,如果元素将响应element.click() 方法调用,则clickable 将是True。否则,您应该尝试使用driver.execute_script("arguments[0].click();", element) 调用。

【讨论】:

    【解决方案2】:

    我强烈认为您的元素还不能点击,因为在程序试图点击它的时候它还没有完全加载。因此,如果您等待 20 秒,问题就不会发生。我建议你看看这个:https://selenium-python.readthedocs.io/waits.html

    您可以使用一种方法来等待您的元素完全加载,然后再单击它。

    只是一些用于说明的代码:

    driver = webdriver.Chrome()
    driver.get("your.web.url")
    
    try:
        element = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.XPATH, "yourXPATH"))
        )
    finally:
        driver.quit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多