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

Selenium WebDriver无法识别不安全网站,如何无API检测网站安全性?

使用Selenium检测Chrome安全警告(无需Google API)

默认情况下,ChromeDriver在headless模式下可能不会自动触发安全警告的可视化提示,或者你的配置没有完全启用安全浏览的保护机制。以下是不用Google API,直接通过Selenium检测网站安全状态的方案:

核心思路

Chrome的安全警告页面(钓鱼、恶意软件、不安全连接)有固定的HTML结构和特征文本,我们可以通过检测这些元素或文本,判断网站是否触发了安全警告。

配置与代码实现

1. 调整ChromeOptions配置

除了启用safebrowsing.enabled,还要开启增强安全保护,同时添加headless模式下的必要参数避免权限问题:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def check_site_security(target_url):
    options = Options()
    options.headless = True
    # 启用完整安全浏览保护
    options.add_experimental_option("prefs", {
        "safebrowsing.enabled": True,
        "safebrowsing.enhanced_protection.enabled": True
    })
    # 解决headless模式下的权限限制
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")

    driver = webdriver.Chrome("/usr/bin/chromedriver", options=options)
    driver.get(target_url)

    is_risky = False
    risk_type = None

    try:
        # 检测钓鱼警告页面的专属元素
        WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.ID, "phishing-warning"))
        )
        is_risky = True
        risk_type = "钓鱼网站警告"
    except:
        try:
            # 检测恶意软件警告页面的专属元素
            WebDriverWait(driver, 5).until(
                EC.presence_of_element_located((By.ID, "malware-warning"))
            )
            is_risky = True
            risk_type = "恶意软件网站警告"
        except:
            # 兜底检测通用安全警告文本
            warning_keywords = [
                "此网站可能会窃取您的信息",
                "此网站包含恶意软件",
                "您的连接不是私密连接"
            ]
            page_content = driver.page_source
            for keyword in warning_keywords:
                if keyword in page_content:
                    is_risky = True
                    risk_type = "通用安全风险警告"
                    break

    # 输出检测结果
    print(f"安全状态: {'存在风险' if is_risky else '安全'}")
    if is_risky:
        print(f"风险类型: {risk_type}")
    print(f"网站标题: {driver.title}")

    driver.quit()
    return is_risky, risk_type

# 测试调用
check_site_security("https://example.com/")
# 可以用官方测试页验证:check_site_security("https://testsafebrowsing.appspot.com/s/phishing.html")

2. 关键注意事项

  • 版本匹配:确保ChromeDriver版本和本地Chrome浏览器版本完全一致,否则可能出现安全警告不触发或元素定位失败的问题。
  • 元素适配:不同Chrome版本的警告页面元素ID可能略有调整,若检测失败,可手动打开警告页面,通过开发者工具查看最新的元素选择器。
  • 等待机制:必须使用WebDriverWait等待元素加载,避免页面未完全渲染就执行检测逻辑。

内容的提问来源于stack exchange,提问作者Vortex666

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:01:18