2

I al looking to capture network traffic and log responses/headers however I cannot seem to find any resources for achieving this in c#. Most if not all of the guides have been for JS or Python. I read that this functionality was not added into the c# version as of 2019 but no new news has been posted. Does anyone know how to get network logs from a ChromeDriver?

dansi21
  • 23
  • 1
  • 3
  • Does this answer your question? [How to set up performance logging in SeleniumWebdriver with Chrome](https://stackoverflow.com/questions/50986959/how-to-set-up-performance-logging-in-seleniumwebdriver-with-chrome) – Abhishek Dhoundiyal Jul 30 '21 at 05:08

4 Answers4

2

If you want to do use a simular version like that one from Jeppe Holt, for Selenium 4+ without being version and browser specific try that one: (Works on Chrome and Edge with Selenium 4.8)

public void SetupNetworkLogging(IWebDriver driver)
{
    NetworkManager manager = new NetworkManager(driver);
    manager.NetworkResponseReceived += ResponseHandler;
    manager.StartMonitoring();
}

private void ResponseHandler(object sender, NetworkResponseReceivedEventArgs e)
{
    Console.WriteLine($"Http status: {e.ResponseStatusCode} : {e.ResponseBody} | Url: {e.ResponseUrl} ");
}

You can also experiment with a devtools session:

IDevTools devTools = driver as IDevTools;
var session = devTools.GetDevToolsSession();
var network = session.Domains.Network;

network.EnableNetwork();
network.EnableNetworkCaching();
Schmebi
  • 355
  • 2
  • 16
1

Wrong, in selenium 4 you can do that but it is still in beta

nuzooo
  • 133
  • 1
  • 11
1

Through much effort and googling around I have created something in C# that seems to do what you want. My answer is an adaption of some C# and Java implementations found on the internet which I could not get to work on individually, but did provide some needed insight.

using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.DevTools;
using Network = OpenQA.Selenium.DevTools.V108.Network;
using DevToolsSessionDomains = OpenQA.Selenium.DevTools.V108.DevToolsSessionDomains;

    internal class Program
    {
        private static async Task Main(string[] args)
        {
            string url = "https://stackoverflow.com/questions/68582545/catching-network-traffic-with-selenium-c-sharp";
            Uri uri = new Uri(url);
            var driver = new ChromeDriver();
            var devTools = (IDevTools)driver;
            IDevToolsSession session = devTools.GetDevToolsSession();
            var domains = session.GetVersionSpecificDomains<DevToolsSessionDomains>();
            domains.Network.ResponseReceived += ResponseReceivedHandler;
            Task task = domains.Network.Enable(new Network.EnableCommandSettings());
            task.Wait();

            driver.Navigate().GoToUrl(uri);
            var name = Console.ReadLine();
            Console.WriteLine("finished");
            driver.Dispose();

            void ResponseReceivedHandler(object sender,Network.ResponseReceivedEventArgs e)
            {
                Console.WriteLine("New Work Response received");
                Console.WriteLine($"Response Status: {e.Response.Status}");
                Console.WriteLine($"Status Text: {e.Response.StatusText}");
                Console.WriteLine($"Response MimeType: {e.Response.MimeType}");
                Console.WriteLine($"Response Url: {e.Response.Url}");
            }
        }
    }

I hope this answer answers your question or at least helps someone in a similar situation.

Selaka Nanayakkara
  • 3,296
  • 1
  • 22
  • 42
Jeppe Holt
  • 75
  • 10
  • The code does not come to dispose – Vas23Vewe Jan 17 '23 at 12:53
  • I think the problem you have encountered is because of the "var name = Console.ReadLine();". This is done on purpose to stop it from closing. You can simply remove the line and it should work, or press enter in the terminal to continue. – Jeppe Holt Jan 20 '23 at 10:00
  • I did it, in this case it does not wait to the url to be launched Need to add something in like wait until.. or retry – Vas23Vewe Jan 22 '23 at 14:57
0

You can use this approach in any selenium version and not wait for the Selenium 4 release.

https://www.automatetheplanet.com/webdriver-capture-modify-http-traffic/

shatulsky
  • 306
  • 2
  • 10