将 user-agent 更改为 Selenium web-driver
Change user-agent for Selenium web-driver
我在Python
中有以下代码:
from selenium.webdriver import Firefox
from contextlib import closing
with closing(Firefox()) as browser:
browser.get(url)
我想打印 user-agent HTTP header 和
可能改变它。可能吗?
Selenium 无法读取请求或响应 headers。您可以通过指示浏览器通过记录此类信息的代理进行连接来实现。
在 Firefox 中设置用户代理
更改 Firefox 用户代理的常用方法是在您的 Firefox 配置文件中设置变量 "general.useragent.override"
。请注意,这与 Selenium 无关。
您可以指示 Selenium 使用与默认配置文件不同的配置文件,如下所示:
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "whatever you want")
driver = webdriver.Firefox(profile)
在Chrome
中设置用户代理
对于Chrome,您要做的是使用user-agent
命令行选项。同样,这不是 Selenium 的东西。您可以在命令行中使用 chrome --user-agent=foo
调用 Chrome 以将代理设置为值 foo
.
对于 Selenium,您可以这样设置:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.add_argument("user-agent=whatever you want")
driver = webdriver.Chrome(chrome_options=opts)
以上两种方法都经过测试,发现有效。我不知道其他浏览器。
获取用户代理
Selenium 没有从 WebDriver
的实例中查询用户代理的方法。即使在 Firefox 的情况下,您也无法通过检查 general.useragent.override
如果未设置为自定义值会是什么来发现默认用户代理。 (此设置在设置为某个值之前不存在。)
然而,一旦浏览器启动,您可以通过执行以下命令获取用户代理:
agent = driver.execute_script("return navigator.userAgent")
agent
变量将包含用户代理。
以 Louis 的有用回答为基础...
在 PhantomJS 中设置用户代理
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
...
caps = DesiredCapabilities.PHANTOMJS
caps["phantomjs.page.settings.userAgent"] = "whatever you want"
driver = webdriver.PhantomJS(desired_capabilities=caps)
唯一的小问题是,与 Firefox 和 Chrome 不同,这 不是 return 您的自定义设置:
driver.execute_script("return navigator.userAgent")
所以,如果有人知道如何在 PhantomJS 中做到这一点,请编辑我的答案或在下面添加评论!干杯。
以 JJC 的有用答案为基础构建 Louis 的有用答案...
对于 PhantomJS 2.1.1-windows 此行有效:
driver.execute_script("return navigator.userAgent")
如果它不起作用,您仍然可以通过日志获取用户代理(以 Mma's answer 为基础):
from selenium import webdriver
import json
from fake_useragent import UserAgent
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (UserAgent().random)
driver = webdriver.PhantomJS(executable_path=r"your_path", desired_capabilities=dcap)
har = json.loads(driver.get_log('har')[0]['message']) # get the log
print('user agent: ', har['log']['entries'][0]['request']['headers'][1]['value'])
这是动态更改请求 UserAgent 的简短解决方案。
使用 Chrome
更改请求的 UserAgent
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Chrome(driver_path)
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent":"python 2.7", "platform":"Windows"})
driver.get('http://amiunique.org')
然后 return 您的用户代理:
agent = driver.execute_script("return navigator.userAgent")
一些来源
来自 SeleniumHQ (https://github.com/SeleniumHQ/selenium/blob/11c25d75bd7ed22e6172d6a2a795a1d195fb0875/py/selenium/webdriver/chrome/webdriver.py) 的 webdriver.py 的源代码通过 Chrome Devtools 协议
扩展了它的功能
def execute_cdp_cmd(self, cmd, cmd_args):
"""
Execute Chrome Devtools Protocol command and get returned result
我们可以使用 Chrome Devtools 协议查看器来列出更多扩展功能 (https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setUserAgentOverride) 以及要使用的参数类型。
Firefox 配置文件已弃用,您必须像这样在 Firefox 选项中使用它:
opts = FirefoxOptions()
opts.add_argument("--headless")
opts.add_argument("--width=800")
opts.add_argument("--height=600")
opts.set_preference("general.useragent.override", "userAgent=Mozilla/5.0
(iPhone; CPU iPhone OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like
Gecko) CriOS/101.0.4951.44 Mobile/15E148 Safari/604.1")
我在Python
中有以下代码:
from selenium.webdriver import Firefox
from contextlib import closing
with closing(Firefox()) as browser:
browser.get(url)
我想打印 user-agent HTTP header 和 可能改变它。可能吗?
Selenium 无法读取请求或响应 headers。您可以通过指示浏览器通过记录此类信息的代理进行连接来实现。
在 Firefox 中设置用户代理
更改 Firefox 用户代理的常用方法是在您的 Firefox 配置文件中设置变量 "general.useragent.override"
。请注意,这与 Selenium 无关。
您可以指示 Selenium 使用与默认配置文件不同的配置文件,如下所示:
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "whatever you want")
driver = webdriver.Firefox(profile)
在Chrome
中设置用户代理对于Chrome,您要做的是使用user-agent
命令行选项。同样,这不是 Selenium 的东西。您可以在命令行中使用 chrome --user-agent=foo
调用 Chrome 以将代理设置为值 foo
.
对于 Selenium,您可以这样设置:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.add_argument("user-agent=whatever you want")
driver = webdriver.Chrome(chrome_options=opts)
以上两种方法都经过测试,发现有效。我不知道其他浏览器。
获取用户代理
Selenium 没有从 WebDriver
的实例中查询用户代理的方法。即使在 Firefox 的情况下,您也无法通过检查 general.useragent.override
如果未设置为自定义值会是什么来发现默认用户代理。 (此设置在设置为某个值之前不存在。)
然而,一旦浏览器启动,您可以通过执行以下命令获取用户代理:
agent = driver.execute_script("return navigator.userAgent")
agent
变量将包含用户代理。
以 Louis 的有用回答为基础...
在 PhantomJS 中设置用户代理
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
...
caps = DesiredCapabilities.PHANTOMJS
caps["phantomjs.page.settings.userAgent"] = "whatever you want"
driver = webdriver.PhantomJS(desired_capabilities=caps)
唯一的小问题是,与 Firefox 和 Chrome 不同,这 不是 return 您的自定义设置:
driver.execute_script("return navigator.userAgent")
所以,如果有人知道如何在 PhantomJS 中做到这一点,请编辑我的答案或在下面添加评论!干杯。
以 JJC 的有用答案为基础构建 Louis 的有用答案...
对于 PhantomJS 2.1.1-windows 此行有效:
driver.execute_script("return navigator.userAgent")
如果它不起作用,您仍然可以通过日志获取用户代理(以 Mma's answer 为基础):
from selenium import webdriver
import json
from fake_useragent import UserAgent
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (UserAgent().random)
driver = webdriver.PhantomJS(executable_path=r"your_path", desired_capabilities=dcap)
har = json.loads(driver.get_log('har')[0]['message']) # get the log
print('user agent: ', har['log']['entries'][0]['request']['headers'][1]['value'])
这是动态更改请求 UserAgent 的简短解决方案。
使用 Chrome
更改请求的 UserAgentfrom selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Chrome(driver_path)
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent":"python 2.7", "platform":"Windows"})
driver.get('http://amiunique.org')
然后 return 您的用户代理:
agent = driver.execute_script("return navigator.userAgent")
一些来源
来自 SeleniumHQ (https://github.com/SeleniumHQ/selenium/blob/11c25d75bd7ed22e6172d6a2a795a1d195fb0875/py/selenium/webdriver/chrome/webdriver.py) 的 webdriver.py 的源代码通过 Chrome Devtools 协议
扩展了它的功能def execute_cdp_cmd(self, cmd, cmd_args):
"""
Execute Chrome Devtools Protocol command and get returned result
我们可以使用 Chrome Devtools 协议查看器来列出更多扩展功能 (https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setUserAgentOverride) 以及要使用的参数类型。
Firefox 配置文件已弃用,您必须像这样在 Firefox 选项中使用它:
opts = FirefoxOptions()
opts.add_argument("--headless")
opts.add_argument("--width=800")
opts.add_argument("--height=600")
opts.set_preference("general.useragent.override", "userAgent=Mozilla/5.0
(iPhone; CPU iPhone OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like
Gecko) CriOS/101.0.4951.44 Mobile/15E148 Safari/604.1")