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?
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
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)
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