web-dev-qa-db-fra.com

Comment capturer le trafic réseau à l'aide de Selenium WebDriver et du proxy Browsermob sur Python?

Je voudrais capturer le trafic réseau en utilisant Selenium Webdriver sur Python. Par conséquent, je dois utiliser un proxy (comme BrowserMobProxy)

Quand j'utilise 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 page Web est chargée correctement et toutes les demandes sont disponibles et accessibles dans le fichier HAR. Mais quand j'utilise 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 page Web ne peut pas être chargée correctement et le nombre de demandes dans le fichier HAR est inférieur au nombre de demandes qui devrait l'être.

Avez-vous une idée de ce que le problème des paramètres de proxy dans le deuxième code? Comment dois-je résoudre le problème pour utiliser webdriver.Firefox correctement?

9
Jose

Je suis tombé par hasard sur ce projet https://github.com/derekargueta/Selenium-profiler . Crache toutes les données du réseau pour une URL. Ne devrait pas être difficile à pirater et à intégrer à tous les tests que vous exécutez.

Source originale: https://www.openhub.net/p/Selenium-profiler

5
Derek Argueta

Pour moi, le composant de code suivant fonctionne très bien.

profile = webdriver.FirefoxProfile()
profile.set_proxy(proxy.Selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)
0
proprius
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  
0
Mike ASP