You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:10:28