Enable “Preserve log” in chrome programmatically using chromedriver

匿名 (未验证) 提交于 2019-12-03 01:05:01

问题:

How to enable preserve log option for chrome developer settings->Preferences->Preserve log upon navigation, using chromeoptions.add_argument or by adding the pref to DesiredCapabilities or any other way programmatically.

回答1:

You can get redirects from performance logs. According to docs and github answer here is what I've done in C#, should be possible to port in Python:

var options = new ChromeOptions(); var cap = DesiredCapabilities.Chrome(); var perfLogPrefs = new ChromePerformanceLoggingPreferences(); perfLogPrefs.AddTracingCategories(new string[] { "devtools.network" }); options.PerformanceLoggingPreferences = perfLogPrefs; options.AddAdditionalCapability(CapabilityType.EnableProfiling, true, true); ptions.SetLoggingPreference("performance", LogLevel.All); var driver = new ChromeDriver(options); var url = "https://some-website-that-will-redirect.com/"; driver.Navigate().GoToUrl(url); var logs = driver.Manage().Logs.GetLog("performance"); //all your logs with redirects will be here 

Looping through logs, if message.params.redirectResponse.url is equal to original URL then message.params.request.url will contain redirect URL

Node.JS using webdriverio:

var options = {     desiredCapabilities: {         browserName: 'chrome',         loggingPrefs: {             'browser': 'ALL',             'driver': 'ALL',             'performance': 'ALL'         },         chromeOptions: {             perfLoggingPrefs: {                 traceCategories: 'performance'             },         }     } var client = webdriverio.remote(options); await client.url(url); var logs = await client.log('performance'); var navigations = parseLogs(logs, url);  function parseLogs(logs, url) {     var redirectList = [];     while (true) {         var targetLog = (logs.value.find(l => {             if (l.message.indexOf(url) == -1)                 return false;             var rootMessage = JSON.parse(l.message);             if (((((rootMessage || {}).message || {}).params || {}).redirectResponse || {}).url == url)                 return true;             return false;         }) || {}).message;         if (!targetLog)             break;         if (redirectList.indexOf(url) != -1)             break;         redirectList.push(url);         var targetLogObj = JSON.parse(targetLog);         var nextUrl = ((((targetLogObj || {}).message || {}).params || {}).request || {}).url;          if (nextUrl) {             url = nextUrl;             continue;         }         break;     }     return redirectList; } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!