【问题标题】:Why am I receiving an ElementClickInterceptedException error?为什么我会收到 ElementClickInterceptedException 错误?
【发布时间】:2024-08-26 11:10:11
【问题描述】:

调查中的问题是:您在一周中的哪几天始终有空?我想周日去看看。

我正在复制从在线视频中看到的代码,但是,我收到了这个错误。有些人建议弹出窗口可能会阻止程序正常工作,但我没有看到弹出窗口。

我尝试过使用 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

我没有看到其他影响程序的元素。有没有人有什么建议?我是编码新手,因此我们将不胜感激。

【问题讨论】:

  • Text Sunday 是此复选框的标签,它可能会隐藏复选框,因此不可点击。您可以尝试点击此标签

标签: python selenium parsing web-scraping


【解决方案1】:

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

正如您所见,即使您使用的是“find_element_by_id”,标签的“for”属性与“id”属性(不一定必须是唯一值)具有相同的值。

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

来获取 xpath

这是一些应该可以工作的代码(注意:我已将 chromedriver.exe 与它自己的 .py 文件放在同一位置):

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()

不要忘记最终关闭驱动程序,否则它将作为正在运行的进程留在后台。

您可以这样做:

driver.close()

希望这会有所帮助!

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      复选框上的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
        
      • 浏览器快照:

      【讨论】:

      • 这非常有效。谢谢@DebanjanB先生! =)