Python:如何用requests模拟Firefox且不打开浏览器获取网站数据
模拟Firefox环境无浏览器获取网站数据
用requests库模拟Firefox请求
不需要打开浏览器,只需要在requests请求中设置Firefox风格的请求头即可——网站识别客户端类型主要靠请求头里的User-Agent字段,部分严格的网站还会校验其他头信息(比如Accept、Accept-Language),模拟完整的Firefox请求环境就能绕过基础校验。
具体操作:
- 获取Firefox的真实请求头:打开Firefox按F12进入开发者工具,切换到「网络」面板,刷新页面后随便点一个请求,在「请求头」里复制
User-Agent、Accept等字段的真实值(不同系统、Firefox版本的字段值会有差异,直接复制自己浏览器的最准确)。 - 构造请求头字典:把复制的字段整理成字典格式。
- 发起请求:用requests的get/post方法,通过
headers参数传入这个字典。
代码示例:
import requests # 替换成你自己Firefox的请求头字段 firefox_headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:115.0) Gecko/20100101 Firefox/115.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' } target_url = "你的目标网站地址" resp = requests.get(target_url, headers=firefox_headers) if resp.status_code == 200: print(resp.text) # 打印网页内容 else: print(f"请求失败,状态码: {resp.status_code}")
处理动态渲染的网站
如果目标网站的数据是通过JavaScript动态加载的,requests只能拿到静态HTML,这时候可以用Selenium配合Firefox无头模式——既模拟Firefox环境,又不会弹出浏览器窗口。
代码示例:
from selenium import webdriver from selenium.webdriver.firefox.options import Options # 配置Firefox无头模式 firefox_options = Options() firefox_options.add_argument("--headless") # 不显示浏览器窗口 firefox_options.add_argument("--disable-gpu") # 避免部分环境下的GPU报错 # 初始化驱动(需要提前下载geckodriver,版本要和你的Firefox匹配,可指定路径如executable_path="/path/to/geckodriver") driver = webdriver.Firefox(options=firefox_options) driver.get("你的目标网站地址") page_html = driver.page_source # 获取JS渲染后的完整页面 print(page_html) driver.quit() # 关闭驱动
注意:使用Selenium需要安装
selenium库(执行pip install selenium),并下载对应版本的geckodriver,确保其路径能被Python找到。
内容的提问来源于stack exchange,提问作者Revavi
相关产品推荐
相关产品推荐

