Selenium无法关闭https://www.e-crvsp.sp.gov.br/网站的通知弹窗,求可行解决方案
Selenium无法关闭https://www.e-crvsp.sp.gov.br/网站的通知弹窗,求可行解决方案
兄弟,我之前也折腾过这个网站,它的反爬机制确实有点棘手,尤其是那个初始弹窗,普通的Selenium操作很容易被拦截。给你几个亲测有效的方案,你可以挨个试试:
1. 先把ChromeDriver伪装成真实浏览器
普通的ChromeDriver自带的自动化特征很容易被网站检测到,你需要给ChromeOptions加一堆参数来模拟真实用户的环境:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException options = webdriver.ChromeOptions() # 核心:禁用自动化检测的标志 options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 复制你自己浏览器的User-Agent(Chrome地址栏输about:config就能看到) options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 禁用扩展、弹窗拦截(避免影响目标弹窗加载) options.add_argument("--disable-extensions") options.add_argument("--disable-popup-blocking") # 如果用无头模式,必须加这些参数,不然更易被检测 options.add_argument("--headless=new") options.add_argument("--window-size=1920,1080")
2. 用显式等待精准操作弹窗
不要用固定的time.sleep(),而是等弹窗元素完全加载可点击后再操作,避免因为加载时机问题导致失败:
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) driver.get("https://www.e-crvsp.sp.gov.br/") try: # 这里的XPath需要你自己用Chrome开发者工具验证!右键弹窗的关闭按钮,复制"完整XPath" close_btn = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//*[@id='some-popup-id']/button[text()='Fechar']")) ) close_btn.click() print("弹窗成功关闭!") except TimeoutException: print("常规点击失败,尝试用JavaScript强制关闭") # 方案1:直接移除弹窗元素(替换成你找到的弹窗容器的选择器) driver.execute_script("document.querySelector('.popup-container-class').remove();") # 方案2:用JS触发关闭按钮的点击事件 # driver.execute_script("document.querySelector('#close-button-id').click();")
3. 终极方案:改用undetected-chromedriver
如果上面的方法还是不行,说明网站的反爬已经精准识别了ChromeDriver,这个时候可以用专门绕过检测的undetected-chromedriver库:
首先安装库:
pip install undetected-chromedriver
然后替换你的驱动初始化代码:
import undetected_chromedriver as uc def test_ecrvsp(): try: options = uc.ChromeOptions() options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 这个库会自动处理大部分反爬检测,不需要加太多额外参数 driver = uc.Chrome(options=options) driver.get("https://www.e-crvsp.sp.gov.br/") # 同样用显式等待找关闭按钮 close_btn = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Fechar')]")) ) close_btn.click() print("成功进入网站!") # 后续操作... driver.quit() except Exception as e: print(f"出错了:{str(e)}") if __name__ == "__main__": test_ecrvsp()
额外提醒
- 网站的元素和反爬规则可能随时更新,如果你发现某个方法失效了,记得重新用Chrome开发者工具检查最新的元素选择器
- 操作过程中可以适当加一点随机延迟(比如
import random; time.sleep(random.uniform(1,3))),模拟真实用户的操作节奏 - 请确保你的操作符合该网站的使用条款,避免违规行为
内容来源于stack exchange
相关产品推荐
相关产品推荐

