Ich habe den folgenden Code in Python
:
from Selenium.webdriver import Firefox
from contextlib import closing
with closing(Firefox()) as browser:
browser.get(url)
Ich möchte den User-Agent-HTTP-Header ausdrucken und ggf. __ ändern. Ist es möglich?
In Selenium gibt es keine Möglichkeit, die Anforderungs- oder Antwortheader zu lesen. Sie können dies tun, indem Sie Ihren Browser anweisen, eine Verbindung über einen Proxy herzustellen, der diese Art von Informationen aufzeichnet.
Die übliche Methode zum Ändern des Benutzeragenten für Firefox besteht darin, die Variable "general.useragent.override"
in Ihrem Firefox-Profil festzulegen. Beachten Sie, dass dies unabhängig von Selen ist.
Sie können Selenium anweisen, ein anderes als das Standardprofil zu verwenden:
from Selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "whatever you want")
driver = webdriver.Firefox(profile)
In Chrome möchten Sie die Befehlszeilenoption user-agent
verwenden. Auch dies ist keine Selensache. Sie können Chrome in der Befehlszeile mit chrome --user-agent=foo
aufrufen, um den Agenten auf den Wert foo
einzustellen.
Mit Selenium stellen Sie es so ein:
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)
Beide oben genannten Methoden wurden getestet und als funktionsfähig befunden. Ich kenne keine anderen Browser.
Selenium verfügt nicht über Methoden, um den Benutzeragenten von einer Instanz von WebDriver
abzufragen. Selbst im Fall von Firefox können Sie den Standardbenutzer-Agenten nicht ermitteln, indem Sie prüfen, was general.useragent.override
wäre, wenn Sie keinen benutzerdefinierten Wert festlegen. (Diese Einstellung ist nicht exist, bevor sie auf einen bestimmten Wert gesetzt wird.)
Sobald der Browser gestartet ist, können Sie den Benutzeragenten abrufen, indem Sie Folgendes ausführen:
agent = driver.execute_script("return navigator.userAgent")
Die Variable agent
enthält den Benutzeragenten.
Um auf Louis 'hilfreiche Antwort zu bauen ...
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)
Das einzige kleinere Problem ist, dass anders als bei Firefox und Chrome nicht Ihre benutzerdefinierte Einstellung zurückgegeben wird:
driver.execute_script("return navigator.userAgent")
Wenn also jemand herausfindet, wie das in PhantomJS gemacht wird, bearbeiten Sie bitte meine Antwort oder fügen Sie einen Kommentar hinzu! Prost.
Um auf JJCs hilfreiche Antwort aufzubauen, die auf Louis 'hilfreicher Antwort aufbaut ...
Mit PhantomJS 2.1.1-Fenstern funktioniert diese Zeile:
driver.execute_script("return navigator.userAgent")
Wenn es nicht funktioniert, können Sie den Benutzeragenten trotzdem über das Protokoll abrufen (um auf Mmas Antwort zu bauen):
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'])
Dies ist eine kurze Lösung, um die Anforderung UserAgent im laufenden Betrieb zu ändern.
UserAgent einer Anfrage mit Chrome ändern
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')
dann gib deinen useragent zurück:
agent = driver.execute_script("return navigator.userAgent")
Einige Quellen
Der Quellcode von webdriver.py von SeleniumHQ ( https://github.com/SeleniumHQ/Selenium/blob/11c25d75bd7ed22e6172d6a2a795a1d195fb0875/py/Selenium/webdriver/chrome/w ) erweitert seine Funktionen durch das Chrome Devtools Protocol
def execute_cdp_cmd(self, cmd, cmd_args):
"""
Execute Chrome Devtools Protocol command and get returned result
Wir können den Chrome Devtools Protocol Viewer verwenden, um erweiterte Funktionen aufzulisten ( https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setUserAgentOverride =) sowie den zu verwendenden Parametertyp.