¿Cómo capturar el tráfico de red utilizando Selenium webdriver y browsermob proxy en Python?

Me gustaría capturar el tráfico de red usando Selenium Webdriver en Python. Por lo tanto, debo usar un proxy (como BrowserMobProxy)

Cuando uso webdriver.Chrome:

from browsermobproxy import Server server = Server("~/browsermob-proxy") server.start() proxy = server.create_proxy() from selenium import webdriver co = webdriver.ChromeOptions() co.add_argument('--proxy-server={host}:{port}'.format(host='localhost', port=proxy.port)) driver = webdriver.Chrome(executable_path = "~/chromedriver", chrome_options=co) proxy.new_har driver.get(url) proxy.har # returns a HAR for ent in proxy.har['log']['entries']: print ent['request']['url'] 

la página web se carga correctamente y todas las solicitudes están disponibles y accesibles en el archivo HAR. Pero cuando uso webdriver.Firefox:

 # The same as above # ... from selenium import webdriver profile = webdriver.FirefoxProfile() driver = webdriver.Firefox(firefox_profile=profile, proxy = proxy.selenium_proxy()) proxy.new_har driver.get(url) proxy.har # returns a HAR for ent in proxy.har['log']['entries']: print ent['request']['url'] 

La página web no se puede cargar correctamente y el número de solicitudes en el archivo HAR es menor que el número de solicitudes que deberían ser.

¿Tiene alguna idea de cuál es el problema de la configuración de proxy en el segundo código? ¿Cómo debo arreglarlo para usar webdriver.Firefox correctamente para mi propósito?

Simplemente tropezé con este proyecto https://github.com/derekargueta/selenium-profiler . Escupe todos los datos de la red para una URL. No debería ser difícil de hackear e integrar en las pruebas que esté ejecutando.

Fuente original: https://www.openhub.net/p/selenium-profiler

Para mí, el siguiente componente de código funciona bien.

 profile = webdriver.FirefoxProfile() profile.set_proxy(proxy.selenium_proxy()) driver = webdriver.Firefox(firefox_profile=profile) 
 I am sharing my solution, this would not write any logs to any file but you can collect all sort of messages such as Errors, Warnings, Logs, Info, Debug , CSS, XHR as well as Requests(traffic) 1. We are going to create Firefox profile so that we can enable option of "Persist Logs" on Firefox (you can try it to enable on your default browser and see if it launches with "Persist Logs" without creating firefox profile ) 2. we need to modify the Firefox initialize code where this line will do magic : options.AddArgument("--jsconsole"); so complete Selenium Firefox code would be, this will open Browser Console everytime you execute your automation : else if (browser.Equals(Constant.Firefox)) { var profileManager = new FirefoxProfileManager(); FirefoxProfile profile = profileManager.GetProfile("ConsoleLogs"); FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(DrivePath); service.FirefoxBinaryPath = DrivePath; profile.SetPreference("security.sandbox.content.level", 5); profile.SetPreference("dom.webnotifications.enabled", false); profile.AcceptUntrustedCertificates = true; FirefoxOptions options = new FirefoxOptions(); options.AddArgument("--jsconsole"); options.AcceptInsecureCertificates = true; options.Profile = profile; options.SetPreference("browser.popups.showPopupBlocker", false); driver = new FirefoxDriver(service.FirefoxBinaryPath, options, TimeSpan.FromSeconds(100)); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); } 3. Now you can write your logic since you have traffic/ logging window open so don't go to next execution if test fails. That way Browser Console will keep your errors messages and help you to troubleshoot further Browser : Firefox v 61 How can you launch Browser Console for firefox: 1. open firefox (and give any URL ) 2. Press Ctrl+Shift+J (or Cmd+Shift+J on a Mac) Link : https://developer.mozilla.org/en-US/docs/Tools/Browser_Console