[英]How to set a custom name for the user-agent using Selenium and Python
我正在使用 selenium + webdriver 并尝试测试不同的用户代理。 我正在为 Windows 上的 Chrome 添加这样的用户代理,例如:
option = Options()
option.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36")
现在,当我登录查看登录详细信息时,它显示 Windows Chrome 但是当我想将其重命名为类似这样的其他名称时:
option.add_argument("user-agent=test-user-agent")
或者
option.add_argument("user-agent=Mozilla/5.0 (test-user-agent NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36")
某些网站显示为unknown
或browser not supported
有没有办法“重命名”用户代理或创建自定义用户代理,或者只有网站知道的预设数量?
用户代理请求 header是一个特征字符串,它允许服务器和网络对等方识别请求用户代理的应用程序、操作系统、供应商和/或版本。
web浏览器常用格式如下:
User-Agent: Mozilla/5.0 (<system-information>) <platform> (<platform-details>) <extensions>
虽然您尝试添加特定用户代理的第一个代码将完美运行:
代码块:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36") driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe') print(driver.execute_script("return navigator.userAgent;"))
控制台 Output:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36
但是根据您的第二次尝试,您无法重命名用户代理,因为它违反了规定的格式/语法。
但是,您始终可以使用execute_cdp_cmd(cmd, cmd_args)
更改用户代理,如下所示:
代码块:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36") driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe') print(driver.execute_script("return navigator.userAgent;")) # Setting UserAgent as Chrome/83.0.4103.97 driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}) print(driver.execute_script("return navigator.userAgent;"))
控制台 Output:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
您可以在以下位置找到一些相关的详细讨论:
使用FirefoxProfile
的常规方法现已弃用,您必须改用Options
。
只需执行与FirefoxProfile
相同的操作,但使用Options
object 代替如下:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
agent = " Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
options.set_preference("general.useragent.override", agent)
driver = webdriver.Firefox(options=options)
要使用随机用户代理,您可以从用户代理的 git 列表中随机提取(需要pip install requests
):
import requests,random
agents = requests.get("https://gist.githubusercontent.com/pzb/b4b6f57144aea7827ae4/raw/cf847b76a142955b1410c8bcef3aabe221a63db1/user-agents.txt").text.split('\n')
agent = random.choice(agents)
有一个有用的 package 通过安装 pip 称为random-user-agent
pip install random-user-agent
然后得到一个随机代理:
from fake_useragent import UserAgent
agent = UserAgent().random
这是使用选项为 selenium 设置随机用户代理的完整示例:
from fake_useragent import UserAgent
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.set_preference("general.useragent.override", UserAgent().random)
driver = webdriver.Firefox(options=options)
干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.