Selenium点击Yesterday按钮报错:ElementClickInterceptedException求助
解决Selenium点击CoinPoker排行榜Yesterday按钮时的ElementClickInterceptedException错误
问题场景
需点击CoinPoker排行榜页面的Yesterday按钮复制昨日数据,点击后解析下方数据,但执行点击时触发ElementClickInterceptedException错误,提示元素在点(1151,1563)不可点击。
错误信息
DevTools listening on ws://127.0.0.1:50944/devtools/browser/3fb9b8ce-215c-405f-918c-8e232e4f7379 Traceback (most recent call last): File "d:\Programowanie_new\coin_poker_lb\main.py", line 17, in <module> click_button.click() File "C:\Users\pkuzi\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\selenium\webdriver\remote\webelement.py", line 94, in click self._execute(Command.CLICK_ELEMENT) File "C:\Users\pkuzi\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\selenium\webdriver\remote\webelement.py", line 395, in _execute return self._parent.execute(command, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\pkuzi\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\selenium\webdriver\remote\webdriver.py", line 347, in execute self.error_handler.check_response(response) File "C:\Users\pkuzi\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element is not clickable at point (1151, 1563)
已尝试的代码
代码1:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Chrome() driver.get("https://coinpoker.com/promotions/daily-cosmic-spins-leaderboard/") click_button = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div/article/div/section[2]/div/div/div[1]/div/div[2]/div/ul/li[2]/button")) ) click_button.click()
代码2:
click_button = driver.find_element(By.XPATH, "//button[text() = 'Yesterday']") click_button.click()
解决方案
该错误通常是元素被页面其他元素(弹窗、导航栏、广告、滚动后不可见)遮挡导致,可尝试以下几种解决方法:
1. 滚动到元素可见位置后点击
先将页面滚动到按钮所在位置,确保元素完全可见再执行点击:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() driver.get("https://coinpoker.com/promotions/daily-cosmic-spins-leaderboard/") click_button = WebDriverWait(driver, 15).until( EC.presence_of_element_located((By.XPATH, "//button[text() = 'Yesterday']")) ) # 滚动到元素位置 ActionChains(driver).move_to_element(click_button).perform() # 等待元素可点击后执行点击 WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text() = 'Yesterday']"))).click()
2. 使用JavaScript强制点击
跳过Selenium的元素可见性检查,直接通过JS触发点击事件:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Chrome() driver.get("https://coinpoker.com/promotions/daily-cosmic-spins-leaderboard/") click_button = WebDriverWait(driver, 15).until( EC.presence_of_element_located((By.XPATH, "//button[text() = 'Yesterday']")) ) # 用JavaScript执行点击 driver.execute_script("arguments[0].click();", click_button)
3. 检查并关闭遮挡元素
如果页面有弹窗(如Cookie提示、广告弹窗),先处理这些遮挡元素:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Chrome() driver.get("https://coinpoker.com/promotions/daily-cosmic-spins-leaderboard/") # 等待并关闭Cookie弹窗(根据实际页面元素调整选择器) try: cookie_close_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Accept') or contains(text(), 'Close')]")) ) cookie_close_btn.click() except: pass # 无弹窗则跳过 click_button = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[text() = 'Yesterday']")) ) click_button.click()
4. 调整浏览器窗口大小
确保浏览器窗口足够大,避免元素被窗口边缘截断:
driver = webdriver.Chrome() driver.maximize_window() # 最大化窗口 driver.get("https://coinpoker.com/promotions/daily-cosmic-spins-leaderboard/") # 后续点击逻辑...
内容的提问来源于stack exchange,提问作者KurczakChrupiacy2
相关产品推荐
相关产品推荐

