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

目标是单击登录页面上的复选框。
我通过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>

我尝试注入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()将元素带入视口,然后按如下所示调用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,并且您必须构造一个唯一的定位器策略,该策略可以唯一地标识预期的元素。
元素的样式属性可能设置为显示:在这种情况下,您必须使用execute_script()方法,如下所示:

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

Selenium:如何使RemoteDriver始终附加到当前的浏览器选项卡? - javascript

我正在开发一个Windows应用程序,该应用程序可以通过语音命令操纵浏览器。我想适当地处理用户添加一些标签并根据需要更改所选标签的情况。事实证明,RemoteDriver仅与一个选项卡一起使用,并且可以通过提供选项卡手柄将焦点切换到另一个选项卡。但是我不知道如何获取选定的选项卡句柄并始终检查选定的选项卡是否已更改,或者是否存在始终与选定的选项卡一起使用的方法…

Selenium:在进行JavaScript调用时无需点击即可获得最终的href /链接 - javascript

我正在抓取一长串的html链接(在ToS下允许)。但是,所有链接都是javascript调用(href =“ javascript :;”),因此使用get_attribute()获取链接将不起作用。我不想实际单击所有链接,因为它会为每个链接下载一个较大的pdf文件是否有可能获得最终调用的href /链接,而无需实际单击链接并下载文件?谢谢! 参考方案 是的…

使用IJavaScriptExecutor时如何挂钩自定义JavaScript触发器 - javascript

我们在Web应用程序中定义了此事件,该事件创建了一个名为timelineEventClicked的自定义触发器canvas.addEventListener('click', function (evt) { evt.stopImmediatePropagation(); var mousePos = getMousePos(canvas…

如果我得到url(''),我该如何使用另一个URL - javascript

我是新手,正在写这篇文章,但是如果源上没有图像,那么我只有空白。有人可以告诉我,如果我正在获取背景图像,如何获取/images/no-image.jpg:url();这是我的代码:<div class="uk-clearfix uk-position-relative"> <div class="recipeb…

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…