启用无头模式后Selenium爬虫语言不符问题排查求助
问题解决:Chrome无头模式爬取网站语言切换异常
问题分析
你遇到的是Chrome无头模式下语言配置不生效的典型问题:
- 有界面模式下,Chrome会结合系统/浏览器语言配置与你设置的参数,正常加载英文内容;
- 无头模式是独立运行环境,默认语言逻辑和有界面模式不同,且你用的
ENG并非标准语言代码(标准为ISO 639-1格式,比如en-US),导致网站无法识别语言偏好,默认返回中文; - 另外,无头模式的默认User-Agent会暴露自身身份,部分网站会据此调整内容展示策略。
解决方案
通过以下3个关键调整即可解决:
- 使用标准语言代码配置
--lang参数,比如en-US; - 添加
Accept-Language请求头,明确告知服务器你的语言偏好; - 设置正常的User-Agent,避免被网站识别为无头浏览器。
修改后的代码
from selenium.webdriver.chrome.options import Options from selenium import webdriver class WebScrapping: def __init__(self, url, graphic_mode): self.scraped_list = [] self.scraped_names = [] self.options = Options() # 统一配置基础参数,避免重复代码 self.url = url # 标准语言代码 + Accept-Language请求头 self.options.add_argument("--lang=en-US") self.options.add_argument("--accept-language=en-US,en;q=0.9") # 设置正常的Chrome User-Agent(可根据当前Chrome版本调整) self.options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") if graphic_mode.lower() in ["enable", "on"]: self.driver = webdriver.Chrome(options=self.options) elif graphic_mode.lower() in ["disable", "off"]: self.options.add_argument("--headless=new") # 新版无头模式,兼容性更接近有界面浏览器 self.driver = webdriver.Chrome(options=self.options) else: print("请使用 on/off 来启用或禁用图形界面模式") return self.driver.get(self.url) self.driver.execute_script(f"document.title = '{url}';")
额外说明
- 新版Chrome的
--headless=new模式比旧版--headless更贴近有界面浏览器的行为,能减少不少兼容性问题; - 如果网站仍根据IP或Cookie返回中文,可尝试添加对应地区的Cookie或使用代理模拟访问环境。
内容的提问来源于stack exchange,提问作者Polaretti
相关产品推荐
相关产品推荐

