如何用Python检测浏览器的钓鱼警告拦截页面?
解决思路与实现建议
requests没法检测钓鱼拦截页面是必然的——它只是单纯发送HTTP请求并获取响应,完全不会触发浏览器内置的安全检测机制(比如Firefox基于PhishTank、Google Safe Browsing的钓鱼识别逻辑),自然拿不到拦截页面的内容。下面给几个可行的方案:
用无头浏览器模拟真实浏览环境
无头浏览器(比如Playwright、Selenium)会完整模拟浏览器的加载流程,包括触发安全检查。你可以用它打开目标URL,然后检查页面内容是否包含钓鱼拦截的特征:- 比如Firefox的拦截页面会有“欺骗性网站”“此网站可能试图欺骗您”这类关键词
- 或者定位拦截页面的专属DOM元素(比如特定的ID、类名,比如Firefox拦截页的容器类
phishing-warning)
举个Playwright的简单示例:
from playwright.sync_api import sync_playwright def check_phish_intercept(url): with sync_playwright() as p: browser = p.firefox.launch(headless=True) page = browser.new_page() page.goto(url, wait_until="domcontentloaded") # 检查页面是否包含钓鱼拦截关键词 has_warning = page.locator("text=欺骗性网站").count() > 0 or page.locator("text=钓鱼").count() > 0 browser.close() return has_warning调用官方安全查询API
直接对接浏览器背后的安全数据源API,比如Google Safe Browsing、Mozilla PhishTank,查询目标URL是否被标记为钓鱼网站。这种方法不需要模拟浏览器,效率更高,但需要申请API密钥:- Google Safe Browsing:提交URL后,API会返回该URL的威胁类型(钓鱼、恶意软件等),如果返回钓鱼标记,说明主流浏览器会拦截它
- PhishTank:可以查询URL是否在钓鱼数据库中,不过需要注意数据更新频率
辅助检查HTTP响应特征
部分安全网关或浏览器扩展在拦截钓鱼网站时,会返回特殊的HTTP状态码(比如403)或自定义响应头。但这个方法通用性差,不同厂商的拦截规则不一样,只能作为补充验证手段。
内容的提问来源于stack exchange,提问作者BRU
相关产品推荐
相关产品推荐

