Python
に次のコードがあります:
from Selenium.webdriver import Firefox
from contextlib import closing
with closing(Firefox()) as browser:
browser.get(url)
User-agent HTTPヘッダーを印刷し、場合によっては変更したいと思います。出来ますか?
Seleniumには、要求または応答ヘッダーを読み取る方法はありません。このような情報を記録するプロキシを介して接続するようにブラウザに指示することにより、それを行うことができます。
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では、user-agent
コマンドラインオプションを使用します。繰り返しますが、これはSeleniumの問題ではありません。コマンドラインでChromeをchrome --user-agent=foo
で呼び出して、エージェントを値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
が何であるかを確認しても、デフォルトのユーザーエージェントを見つけることはできません。 (この設定は、何らかの値に設定されるまでexistではありません。)
ただし、ブラウザが起動したら、次を実行してユーザーエージェントを取得できます。
agent = driver.execute_script("return navigator.userAgent")
agent
変数にはユーザーエージェントが含まれます。
ルイの役に立つ答えに基づいて...
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とは異なり、これがnotを返し、カスタム設定を返すことです:
driver.execute_script("return navigator.userAgent")
だから、誰かがPhantomJSでそれを行う方法を見つけたら、私の答えを編集するか、下にコメントを追加してください!乾杯。
ルイの有益な答えに基づくJJCの有益な答えに基づいて...
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')
次に、ユーザーエージェントを返します:
agent = driver.execute_script("return navigator.userAgent")
一部のソース
SeleniumHQのwebdriver.pyのソースコード( https://github.com/SeleniumHQ/Selenium/blob/11c25d75bd7ed22e6172d6a2a795a1d195fb0875/py/Selenium/webdriver/chrome/ webdriver.py )Chrome Devtools Protocolを通じて機能を拡張します
def execute_cdp_cmd(self, cmd, cmd_args):
"""
Execute Chrome Devtools Protocol command and get returned result
Chrome Devtools Protocol Viewerを使用して、さらに拡張された機能をリストできます( https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setUserAgentOverride )使用するパラメータタイプも同様です。