目标是点击登录页面上的复选框。 我通过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)
任何想法如何解决这个问题?
答案 0 :(得分:0)
您可以使用此XPATH: - //input[@type='checkbox'and @name='conditions']
对于以下错误: - 在点击事件之前使用等待
selenium.common.exceptions.WebDriverException:消息:未知错误:元素在点(51,549)处无法点击。其他元素会收到点击:...
答案 1 :(得分:0)
根据您的代码试用尝试:
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()
is_displayed()
将始终返回 False ,您必须构建一个唯一的定位器策略,它唯一地标识所需的元素。元素的 style 属性可能设置为 display:none; ,在这种情况下,您必须使用{{1}方法如下:
execute_script()