在 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()
您遇到该问题的原因是出现了
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
虽然@Kunduk 提供的答案是一个很好且有效的答案,但我想提供一种替代方案。
如果由于某种原因,您无法删除与要单击的元素重叠的元素,您可以使用:
btn = self.driver.find_element("xpath", XPATH_BUTTON)
driver.execute_script("arguments[0].click();", btn)
这将使用 JavaScript 来单击按钮,并且无论是否有 elelement 与其重叠,它都会起作用。