如何在Python Selenium Chrome Webdriver中同时添加多个实验性选项
Selenium Chrome同时使用已打开窗口和移动端模拟的解决方案
问题根因
你遇到的报错和配置不生效问题由两个原因导致:
add_experimental_option方法除实例本身外仅接收2个参数:配置名、配置值,一次性传入4个参数属于API调用错误,必然触发TypeError。- 当使用
debuggerAddress连接已运行的Chrome进程时,所有启动阶段的配置参数(包括mobileEmulation)都会被Chrome忽略,因为进程启动完成后启动配置无法通过Selenium配置项动态修改,同时传入两个配置会触发参数不兼容报错。
可行解决方案
方案1:启动Chrome时同时开启远程调试和移动端模拟
如果你可以控制Chrome的启动过程,直接在启动时同时配置远程调试端口和移动端模拟即可,后续Selenium直接连接复用窗口:
from selenium import webdriver from selenium.webdriver.chrome.options import Options opt = Options() # 配置移动端模拟 opt.add_experimental_option("mobileEmulation", { "deviceName": "Pixel 2" }) # 开启远程调试端口,后续脚本可以直接连接这个端口复用窗口 opt.add_argument("--remote-debugging-port=8989") # 可选:配置固定用户目录,保留浏览器的缓存、登录状态等 # opt.add_argument("--user-data-dir=你的本地用户目录路径") driver = webdriver.Chrome(executable_path = my_path, options = opt) driver.get(URL)
后续需要复用这个窗口时,直接用debuggerAddress连接localhost:8989即可,不需要再加mobileEmulation配置。
方案2:连接已运行Chrome后动态开启移动端模拟
如果你需要连接的Chrome已经打开、无法重启,可以通过Chrome DevTools Protocol(CDP)命令动态修改设备模拟配置,效果和启动时配置mobileEmulation完全一致:
from selenium import webdriver from selenium.webdriver.chrome.options import Options opt = Options() opt.add_experimental_option("debuggerAddress", "localhost:8989") driver = webdriver.Chrome(executable_path = my_path, options = opt) # 配置Pixel 2对应的设备参数 driver.execute_cdp_cmd('Emulation.setDeviceMetricsOverride', { "width": 411, "height": 731, "deviceScaleFactor": 2.625, "mobile": True, "fitWindow": False }) # 配置Pixel 2对应的User-Agent driver.execute_cdp_cmd('Network.setUserAgentOverride', { "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36" }) driver.get(URL)
内容的提问来源于stack exchange,提问作者ha.fi
相关产品推荐
相关产品推荐

