ai didi

javascript - 找到 Python Selenium Webdriver 元素但无法单击它

转载 作者:行者123 更新时间:2023-12-03 02:06:12 24 4
gpt4 key购买 nike

目标是单击登录页面上的复选框。我通过 XPATH 找到了该元素,但无法单击它。

>>> elem = driver.find_element_by_xpath("//input[@type='checkbox'][@name='conditions']")
>>> elem.is_displayed()
False
>>> elem.is_enabled()
True
>>> elem.get_attribute('outerHTML')
u'<input type="checkbox" class="custom-control-input" name="conditions">'

当我尝试elem.click()时,出现异常: selenium.common.exceptions.ElementNotVisibleException: Message: element not visible但元素清晰可见,因为页面已加载并且我在终端工作。

当我使用不同的选择器时出现的其他错误是: driver.find_element_by_xpath('/html/body/div[2]/main/section/div/div[3]/div/div[1]/form/p[1]/label/input').click()

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <input type="checkbox" class="custom-control-input" name="conditions"> is not clickable at point (51, 549). Other element would receive the click: <span class="custom-control-description font-weight-regular">...</span>

我尝试注入(inject) JavaScript,但没有成功。 driver.execute_script("arguments[0].style.visibility = 'visible';",elem)

有什么想法可以解决这个问题吗?

最佳答案

根据您尝试时的代码试验:

elem.click()

您正在看到:

selenium.common.exceptions.ElementNotVisibleException: Message: element not visible

这意味着所需的元素在 HTML DOM 中仍然不可见

即使在尝试点击之前:

elem.is_displayed()

您正在看到:

False

但是当你尝试时:

elem.is_enabled()

您正在看到:

True

因此,结合所有这些观察结果,可能是以下两种情况:

  • 元素存在DOM中,但仍然不可见/不可交互。在这种情况下,您需要引发WebDriverWait,然后调用click(),如下所示:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@type='checkbox' and @name='conditions']"))).click()
  • 元素存在DOM 中,但不在 Viewport 中。在这种情况下,您需要调用 execute_script() 将元素引入视口(viewport),然后调用 click(),如下所示:

    elem = driver.find_element_by_xpath("//input[@type='checkbox' and @name='conditions']")
    driver.execute_script("arguments[0].scrollIntoView(true);", elem)
    elem.click()
  • 您所采用的定位器策略有可能不是唯一的,并且会识别多个WebElement,并且要识别的第一个元素可能会被隐藏。在这种情况下,is_displayed() 将始终返回 False,并且您必须构造一个唯一的定位器策略来唯一地标识预期元素。
  • 元素的 style 属性有可能设置为 display: none;,在这种情况下,您必须使用 execute_script ()方法如下:

    elem = driver.find_element_by_xpath("//input[@type='checkbox' and @name='conditions']")
    driver.execute_script("arguments[0].removeAttribute('style')", elem)
    elem.click()

关于javascript - 找到 Python Selenium Webdriver 元素但无法单击它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49796431/

24 4 0
文章推荐: javascript - React Map 方法 - 单独放置回调函数并发送参数
文章推荐: javascript - 如何动态创建带有Tags的组件?
文章推荐: javascript - 如何嵌入多个 YouTube 音频
文章推荐: javascript - 如何使用 aframe 以编程方式创建场景
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com