Python Selenium ElementClickInterceptedException

问题描述 投票:0回答:2

在 Selenium 的帮助下,我已经尝试了多种方法来单击特定网站上的链接。所有这些都会导致以下错误消息:

ElementClickInterceptedException:消息:元素单击被拦截:元素 LMGP06050001 在点 (159, 364) 处不可单击。其他元素将收到点击:... (会话信息:chrome=89.0.4389.90)

我做错了什么?

目标是到达以下站点并从那里获取一些数据: https://www.lipidmaps.org/data/LMSDRecord.php?LMID=LMGP06050001

到目前为止我的代码如下:

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

PATH = "C:\\Users\\xxxxxx\\anaconda3\\chromedriver.exe"
browser = webdriver.Chrome(PATH)

browser.get("https://www.lipidmaps.org/data/structure/LMSDSearch.php?Mode=ProcessClassSearch&LMID=LMGP0605")

link = browser.find_element_by_link_text("LMGP06050001")
browser.implicitly_wait(5)
link.click()
python selenium webdriver selenium-chromedriver webdriverwait
2个回答
0
投票

您遇到该问题的原因是出现了

cookie
弹出窗口,您需要先接受 cookie。

使用

WebDriverWait
() 并等待 element_to_be_clickable()

browser.get("https://www.lipidmaps.org/data/structure/LMSDSearch.php?Mode=ProcessClassSearch&LMID=LMGP0605")

#Accept to cookie
WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"button#cookie_notice_accept"))).click()

WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.LINK_TEXT,"LMGP06050001"))).click()

您需要导入以下库

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

0
投票

虽然@Kunduk 提供的答案是一个很好且有效的答案,但我想提供一种替代方案。

如果由于某种原因,您无法删除与要单击的元素重叠的元素,您可以使用:

btn = self.driver.find_element("xpath", XPATH_BUTTON)
driver.execute_script("arguments[0].click();", btn)

这将使用 JavaScript 来单击按钮,并且无论是否有 elelement 与其重叠,它都会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.