Cambiar el agente de usuario para el controlador de selenium

Tengo el siguiente código en Python :

 from selenium.webdriver import Firefox from contextlib import closing with closing(Firefox()) as browser: browser.get(url) 

Me gustaría imprimir el encabezado HTTP de usuario-agente y posiblemente cambiarlo. ¿Es posible?

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 registra 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 de Selenium.

Puede indicar a Selenium que use un perfil diferente del 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 la opción de línea de comandos del user-agent . Una vez más, esto no es una cosa de selenium. Puede invocar Chrome en la línea de comandos con chrome --user-agent=foo para establecer el agente en el valor foo .

Con Selenium lo pones 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 sé sobre otros navegadores.

Obtener el agente de usuario

Selenium no tiene métodos para consultar al agente de usuario desde una instancia de WebDriver . Incluso en el caso de Firefox, no puede descubrir el agente de usuario predeterminado al verificar qué general.useragent.override sería si no se configurara 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") 

La variable de agent contendrá el agente de usuario.

Para construir sobre 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 devuelve su configuración personalizada:

 driver.execute_script("return navigator.userAgent") 

Entonces, si alguien descubre cómo hacerlo en PhantomJS, edite mi respuesta o agregue un comentario a continuación. Aclamaciones.

Para aprovechar la útil respuesta de JJC que se basa en la útil respuesta de Louis …

Con PhantomJS 2.1.1-windows esta línea funciona:

 driver.execute_script("return navigator.userAgent") 

Si no funciona, aún puede obtener el agente de usuario a través del registro (para aprovechar la respuesta de Mma ):

 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'])