Enable “Preserve log” in chrome programmatically using chromedriver

后端 未结 1 1008
孤独总比滥情好
孤独总比滥情好 2021-01-13 12:55

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 Desired

相关标签:
1条回答
  • 2021-01-13 13:31

    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;
    }
    
    0 讨论(0)
提交回复
热议问题