无法通过Python中的Selenium单击复选框

为什么我无法通过Python中的Selenium单击页面https://realty.yandex.ru/add上的以下复选框?

import traceback

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


explicit_wait_timeout_secs = 10


def wait_for_element_presence(driver, find_type, web_element):
    return selenium.webdriver.support.ui.WebDriverWait(driver, explicit_wait_timeout_secs).until(EC.presence_of_element_located((find_type, web_element)))


def wait_for_element_clickable(driver, find_type, web_element):
    return selenium.webdriver.support.ui.WebDriverWait(driver, explicit_wait_timeout_secs).until(EC.element_to_be_clickable((find_type, web_element)))


try:
    driver = selenium.webdriver.Chrome()

    driver.get('https://realty.yandex.ru/add/')

    # element = wait_for_element_clickable(driver, By.NAME, 'lift')  # TimeoutException
    element = wait_for_element_presence(driver, By.NAME, 'lift')  # WebDriverException: Message: unknown error: Element is not clickable at point (203, 899). Other element would receive the click: <span class="checkbox__box">...</span>
    element.click()
except Exception:
    print('ERROR: \n' + traceback.format_exc())

try:
    driver.quit()
except Exception:
    pass

如果我正在尝试等待此元素的“可点击性”,它会给我TimeoutException错误.如果我正在尝试等待元素的存在,它会给我“元素不可点击”错误.

但是,我可以通过Javascript单击此复选框:

driver.execute_script("document.getElementsByName('lift')[0].click();")

它也适用于Firefox btw.

为什么?我究竟做错了什么?我该如何解决?

提前致谢.

解决方法:

您需要单击span标记,该标记是input =“lift”的输入标记的父级的父级:

element = driver.find_element_by_xpath('//span[span/input[@name="lift"]]')
element.click()

适用于Chrome和Firefox的我:

为了安全起见,您还可以在点击之前使用scroll to an element

def scroll_element_into_view(driver, element):
    """Scroll element into view"""
    y = element.location['y']
    driver.execute_script('window.scrollTo(0, {0})'.format(y))

element = driver.find_element_by_xpath('//span[span/input[@name="lift"]]')
scroll_element_into_view(driver, element)
element.click()

相关文章

转载地址:https://www.cnblogs.com/mini-monkey/p/12104821...
web自动化测试过程中页面截图相对比较简单,可以直接使用sel...
目录前言一、Selenium简介二、浏览器驱动1.浏览器驱动参考2....
一、iframe的含义:iframe是HTML中框架的一种形式,在对界面...
转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.to...
'''##**认识selenium**​**下载:pipinstall...