如何在Selenium中更改Google Chrome的用户代理?

64

我正在尝试找到一种方法,使得每当我通过Python中的Selenium打开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/")

然而,代码似乎无法正常工作,并且在打开指定的网页之前停止。我相当确定代码的前半部分出了问题,但我不太确定具体是哪里出了问题。非常感谢任何帮助。

2个回答

116
使用随机的用户代理的简单方法是使用Python的fake_useragent模块,如下所示:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent

options = Options()
ua = UserAgent()
user_agent = ua.random
print(user_agent)

options.add_argument(f'--user-agent={user_agent}')
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次连续执行的结果如下:
  1. 第一次执行:

    Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36
    
  2. 第二次执行:

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36
    
  3. 第三次执行:

    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
    

1
谢谢。我们是否可以通过类似的方法在打开Chrome时将用户代理专门更改为Edge-Mobile? - theCrabNebula
1
@theCrabNebula,我不确定我是否理解了你的问题,也许我们使用了options类,它可以为您提供灵活性来调整任何Capability,例如Edge - Mobile - undetected Selenium
2
当我访问g2.com的“查询”时,对我没有用,我总是得到验证码。 - agent18
2
有没有一种方法可以在不关闭 Web Driver 实例的情况下完成这个操作? - Jenya Pu
2
仍然适用于2022年,只需在您的CMD上运行以下命令(适用于CentOS 7):对于Python 2.X,请运行pip install fake-useragent,对于Python 3.X+,请尝试运行pip3 install fake-useragent,然后导入from fake_useragent import UserAgent - Jameu Lukasli1
显示剩余3条评论

31

你应该使用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)

这应该可以正常工作。


1
感谢您的回复。您的代码可能是正确的,但我还没有能够让它正常工作。现在命令提示符打开了,但Chrome没有启动,即使我添加了打开特定页面的Chrome代码。有什么想法吗? - theCrabNebula
2
@theCrabNebula,你有收到任何错误信息吗?如果有的话,是什么?我经常看到这个问题与没有正确引用chromedriver可执行文件的文件系统位置有关。 - Liquidgenius
2
'chrome_options'已被弃用,请使用'options'。 - c10ud
2
抱歉,我的问题可能有点“菜鸟”,但如果机器人一直使用相同的IP地址,改变UserAgent有什么意义呢?在这种情况下,改变UserAgent不会使Selenium机器人更加可疑,并容易被网站屏蔽吗? - Upchanges
默认情况下,Selenium 大多数时候不使用任何用户代理。这意味着网站会将您识别为使用非认可的 Web 浏览器。使用广泛使用的 Web 浏览器的用户代理更改用户代理将避免这种情况发生。 - Sahan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接