使用Selenium爬取英国航空评论时遭遇ElementClickInterceptedException问题
解决ElementClickInterceptedException:广告弹窗拦截下一页按钮的问题
你遇到的问题确实是广告弹窗导致的——进入第二页时弹出的广告会覆盖下一页按钮,直接拦截了点击操作。哪怕加了元素可点击的等待逻辑,没处理弹窗的话错误还是会出现。
给你两个可行的解决思路:
思路一:先检测并关闭广告弹窗
在点击下一页之前,先检查页面是否出现广告弹窗,找到关闭按钮并点击。你需要根据实际页面的弹窗结构调整定位规则,比如常见的关闭按钮会带"close"类名或"×"符号:
修改后的代码示例:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from time import sleep rating_title = [] for i in range(35): print("Scraping ", i+1) # 爬取评论标题 titles = browser.find_elements_by_xpath("//h2[@class='text_header']") for title in titles: rating_title.append(title.text) # 处理广告弹窗:尝试定位并关闭 try: # 这里的xpath需根据实际弹窗关闭按钮调整,示例为通用规则 close_btn = WebDriverWait(browser, 5).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'close') or contains(text(), '×')]")) ) close_btn.click() sleep(1) # 给弹窗关闭留缓冲时间 except: # 没有弹窗就跳过 pass # 等待并点击下一页 next_button = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, ">>")) ) next_button.click() sleep(2) # 页面加载时间可根据实际情况调整
思路二:用JavaScript直接点击下一页按钮
如果弹窗定位困难,或者关闭后仍有拦截问题,可以直接通过JS执行点击操作,绕过元素被遮挡的限制:
把下一页点击的代码替换为:
# 等待元素出现,然后用JS点击 next_button = WebDriverWait(browser, 10).until( EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, ">>")) ) browser.execute_script("arguments[0].click();", next_button)
这种方式直接通过浏览器脚本触发点击,不受页面元素遮挡的影响,适合快速解决拦截问题。
另外提醒:频繁爬取可能触发网站反爬机制,建议适当延长等待时间或添加随机延迟,避免IP被封禁。
内容的提问来源于stack exchange,提问作者user17589423
相关产品推荐
相关产品推荐

