在 Selenium 中更改 Google Chrome 用户代理的方法?

Posted

技术标签:

【中文标题】在 Selenium 中更改 Google Chrome 用户代理的方法?【英文标题】:Way to change Google Chrome user agent in Selenium? 【发布时间】:2018-09-08 22:35:22 【问题描述】:

我试图找出一种方法,每当我在这个特定脚本中通过 Selenium(在 Python 中)打开 Chrome 时,Chrome 页面会自动打开并选择另一个用户代理 - 在这种情况下,Microsoft Edge Mobile(但我将从桌面访问它)。

所以,经过一些研究,我已经能够拼凑出以下代码,我认为这些代码会在 Chrome 中执行用户代理切换,然后打开一个新的 Bing.com 页面:

from selenium import webdriver 
from selenium.webdriver.chrome.options

import Options opts = Options()
opts.add_argument("user-agent=Mozilla/5.0 (Windows Phone 10.0; android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166")
driver = webdriver.Chrome(chrome_options=opts)
driver = webdriver.Chrome("D:\_")
driver.get("https://www.bing.com/")

但是,代码似乎不起作用,并在打开指定网页之前停止。我相当肯定代码的前半部分已关闭,但我不太确定如何。任何和所有的帮助将不胜感激。

【问题讨论】:

【参考方案1】:

使用随机用户代理的简单方法是使用 Python 的 fake_useragent 模块,如下所示:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent

options = Options()
ua = UserAgent()
userAgent = ua.random
print(userAgent)
options.add_argument(f'user-agent=userAgent')
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\ChromeDriver\chromedriver_win32\chromedriver.exe')
driver.get("https://www.google.co.in")
driver.quit()

连续3次执行结果如下:

    第一次执行:

    Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36
    

    第二次执行:

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36
    

    第三次执行:

    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17
    

【讨论】:

谢谢。当我使用类似的方法打开 Chrome 时,我们是否可以将用户代理专门更改为 Edge - Mobile? @theCrabNebula 我不确定我是否理解您的问题,也许我们使用了options 类,它可以让您灵活地适应任何Capability,例如边缘 - 移动 当我访问他们的“查询”时在 g2.com 上对我不起作用,我总是得到验证码。 有没有办法在不关闭 Web 驱动程序实例的情况下做到这一点?【参考方案2】:

您应该使用 selenium.webdriver 中的 ChromeOptions:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--user-agent="Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166"')
driver = webdriver.Chrome(chrome_options=chrome_options)

这应该可行。

【讨论】:

感谢您的回复。您的代码可能是正确的,但我还不能让它工作。现在命令提示符打开并且 Chrome 没有启动,即使我为 Chrome 添加代码以打开特定页面也是如此。有什么想法吗? @theCrabNebula 您是否收到任何错误消息,如果有,它们是什么?我通常看到这个问题与没有正确引用 chromedriver 可执行文件的文件系统位置有关。 'chrome_options' 已弃用。请改用“选项”。

以上是关于在 Selenium 中更改 Google Chrome 用户代理的方法?的主要内容,如果未能解决你的问题,请参考以下文章

更新Ubuntu中chrome的方法

Selenium ChromeDriver与Chrome版本映射表(更新到v78)

Selenium ChromeDriver与Chrome版本映射表(更新到v78)

如何使用 selenium 或 appium 在 android 上自动化 chrome 浏览器?

如何使用 selenium 在某些网站中使用 kakao、google、naver id 自动登录

在 Rails 中使用 Capybara 和 Selenium 测试 Google 地图标记