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
相关产品推荐
相关产品推荐

