it-swarm.com.de

Ändern Sie den Benutzeragenten für den Selenium-Treiber

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?

50
xralf

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.

Einstellen des Benutzeragenten in Firefox

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)

Einrichten des Benutzeragenten in Chrome

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.

Den Benutzeragenten abrufen

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.

96
Louis

Um auf Louis 'hilfreiche Antwort zu bauen ...

Festlegen des Benutzeragenten in 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)

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.

14
JJC

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'])
0
J. Does

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.

0
Nioooooo