为什么会收到ElementClickInterceptedException错误?

时间:2019-09-11 05:58:12

标签: python selenium parsing web-scraping

调查中的问题是:您一周中的哪几天一直有空?我想检查星期天。

我正在复制从在线视频中看到的代码,但是,我收到此错误。有人建议弹出窗口可能会阻止程序正常运行,但我看不到弹出窗口。

我尝试使用chromedriver和geckodriver。两者都存在错误。

查看是否选择了星期日的代码可以正常工作:

status=driver.find_element_by_id("RESULT_CheckBox-8_0").is_selected()
print(status) 

输出:

False

这是我的代码:

from selenium import webdriver 

driver=webdriver.Chrome(executable_path="my_webdriver_path"\\chromedriver.exe

driver.get("https://fs2.formsite.com/meherpavan/form2/index.html?1537702596407")

您一周中的哪几天一直有空?

我现在要选中“星期日”框。这是我的代码:

status=driver.find_element_by_id("RESULT_CheckBox-8_0").click()
    print(status)

我希望选中“星期日”框,但收到此错误:

selenium.common.exceptions.ElementClickInterceptedException: Message: Element <input id="RESULT_CheckBox-8_0" class="multiple_choice" name="RESULT_CheckBox-8" type="checkbox"> is not clickable at point (313,599) because another element <label> obscures it

我看不到另一个使程序模糊的元素。有没有人有什么建议?我是编码新手,所以将不胜感激。

3 个答案:

答案 0 :(得分:2)

您遇到的问题与 label input 标记中用于不同属性的相同值有关。

即使您使用的是“ find_element_by_id”,您也可以看到标签的“ for”属性的值与“ id”属性的值相同(不一定总是唯一的值)。

要解决此问题,您可以使用其他定位器,例如XPATH。您可以通过右键单击元素(在使用f12检查代码时)来获得xpath,然后选择[copy]-[xpath]

这是一些应该起作用的代码(注意:我将chromedriver.exe放置在与其自身的.py文件相同的位置):

chat_message

不要忘记最终关闭驱动程序,否则它将在运行过程中停留在后台。

您可以通过以下方式实现:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://fs2.formsite.com/meherpavan/form2/index.html?1537702596407')
status = driver.find_element_by_id("RESULT_CheckBox-8_0").is_selected()

if status:
    pass
else:
    driver.find_element_by_xpath("//*[@id='q15']/table/tbody/tr/td[1]/label").click()

希望这会有所帮助!

答案 1 :(得分:2)

尝试使用ActionChains单击元素。

element = driver.find_element_by_id("RESULT_CheckBox-8_0")
ActionChains(driver).move_to_element(element).click(element).perform()
status = driver.find_element_by_id("RESULT_CheckBox-8_0").is_selected()
print(status)

正在导入:

from selenium.webdriver import ActionChains

答案 2 :(得分:2)

要在复选框click()(文本为 Sunday ),您可以使用以下Locator Strategy

  • 使用XPATH

    driver.get("https://fs2.formsite.com/meherpavan/form2/index.html?1537702596407")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[starts-with(@for, 'RESULT_CheckBox-') and contains(., 'Sunday')]"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

Sunday