Selenium配置Chrome翻译Options首次加载页面不生效如何解决
Selenium控制Chrome自动翻译首次加载不生效问题
问题复现
使用Selenium驱动Chrome爬取亚马逊法国站点,期望页面加载时自动将法语翻译为英语,初始实现代码如下:
myoptions = webdriver.ChromeOptions() prefs = { "translate_whitelists": {"fr":"en"}, "translate": {"enabled":"true"} } myoptions.add_experimental_option("prefs", prefs) path = r'C:\chromedriver.exe' browser = webdriver.Chrome(executable_path=path, options=myoptions) browser.get("https://www.amazon.fr/dp/0001002791")
实际运行出现异常现象:
- 首次加载目标页面时翻译功能未触发,页面仍显示法语

- 从该页面跳转到任意其他链接后,翻译功能正常生效,地址栏显示翻译图标,同时弹出翻译提示

- 跳转触发翻译功能后,所有页面(包括最初加载的目标商品页)都会被自动翻译

问题原因
该问题由Chrome内置翻译模块的初始化时序问题导致:
Chrome启动过程中,翻译服务组件的初始化完成时间晚于首个页面的导航加载触发时间,首个页面请求、渲染的全流程中,自动翻译、语言白名单的配置还未被翻译模块读取加载,因此不会触发自动翻译逻辑。等首个页面加载完成、浏览器所有后台组件初始化完毕后,后续的导航、刷新动作都能正常命中翻译配置,就会出现跳转一次后全页面翻译正常生效的现象。
修复方案
方案1(推荐):预加载空白页完成组件初始化
启动浏览器后先访问轻量空白页,等待浏览器全量组件(包括翻译模块)初始化完成后,再跳转至目标页面,不会产生额外的目标站点请求,稳定性最高。参考代码:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver myoptions = webdriver.ChromeOptions() prefs = { "translate_whitelists": {"fr":"en"}, "translate": { "enabled":"true", "auto_translate": True # 可选配置,直接自动翻译不弹出提示框 } } myoptions.add_experimental_option("prefs", prefs) path = r'C:\chromedriver.exe' browser = webdriver.Chrome(executable_path=path, options=myoptions) # 先访问空白页等待初始化 browser.get("about:blank") WebDriverWait(browser, 3).until(EC.url_to_be("about:blank")) # 再加载目标站点 browser.get("https://www.amazon.fr/dp/0001002791")
方案2:首次加载后手动刷新页面
如果不需要严格控制首次请求,可以在目标页面首次加载完成后执行一次刷新操作,此时翻译模块已经完成初始化,刷新后会自动触发翻译逻辑。仅需要在原有代码的browser.get(...)行后添加一行:
browser.refresh()
该方案会多发起一次目标页面请求,加载速度比方案1慢。
方案3:添加启动参数强制提前初始化翻译模块
Chrome 100以上版本支持添加启动参数,强制翻译模块在浏览器启动阶段完成初始化,直接在配置项中添加参数即可:
myoptions.add_argument("--force-autotranslate-on-first-run")
该方案兼容性受Chrome版本限制,低版本浏览器不生效。
内容的提问来源于stack exchange,提问作者Afreen Sofi
相关产品推荐
相关产品推荐

