Solución:
No hay forma en Selenium de leer los encabezados de solicitud o respuesta. Puede hacerlo indicando a su navegador que se conecte a través de un proxy que registre este tipo de información.
Configuración del agente de usuario en Firefox
La forma habitual de cambiar el agente de usuario para Firefox es establecer la variable "general.useragent.override"
en su perfil de Firefox. Tenga en cuenta que esto es independiente del selenio.
Puede indicarle a Selenium que use un perfil diferente al predeterminado, como este:
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "whatever you want")
driver = webdriver.Firefox(profile)
Configuración del agente de usuario en Chrome
Con Chrome, lo que desea hacer es usar el user-agent
opción de línea de comando. Nuevamente, esto no es una cosa de Selenium. Puede invocar Chrome en la línea de comando con chrome --user-agent=foo
para configurar el agente al valor foo
.
Con Selenium lo configura así:
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)
Ambos métodos anteriores fueron probados y se encontró que funcionan. No conozco otros navegadores.
Obtener el agente de usuario
Selenium no tiene métodos para consultar el agente de usuario desde una instancia de WebDriver
. Incluso en el caso de Firefox, no puede descubrir el agente de usuario predeterminado comprobando qué general.useragent.override
sería si no se establece en un valor personalizado. (Esta configuración no existe antes de que se establezca en algún valor).
Sin embargo, una vez que se inicia el navegador, puede obtener el agente de usuario ejecutando:
agent = driver.execute_script("return navigator.userAgent")
los agent
La variable contendrá el agente de usuario.
Para aprovechar la útil respuesta de Louis …
Configuración del agente de usuario en 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)
El único problema menor es que, a diferencia de Firefox y Chrome, esto no no devolver su configuración personalizada:
driver.execute_script("return navigator.userAgent")
Entonces, si alguien descubre cómo hacer eso en PhantomJS, edite mi respuesta o agregue un comentario a continuación. Salud.
Esta es una solución breve para cambiar la solicitud UserAgent sobre la marcha.
Cambiar UserAgent de una solicitud con Chrome
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')
luego devuelve tu useragent:
agent = driver.execute_script("return navigator.userAgent")
Algunas fuentes
El código fuente de webdriver.py de SeleniumHQ (https://github.com/SeleniumHQ/selenium/blob/11c25d75bd7ed22e6172d6a2a795a1d195fb0875/py/selenium/webdriver/chrome/webdriver.py) extiende sus funcionalidades a través del Protocolo Chrome Devtools
def execute_cdp_cmd(self, cmd, cmd_args):
"""
Execute Chrome Devtools Protocol command and get returned result
Podemos usar Chrome Devtools Protocol Viewer para enumerar funcionalidades más extendidas (https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setUserAgentOverride) así como el tipo de parámetros a usar.