IDevTools instance does not contain CreateDevToolsSession method

Viewed 637

I'm trying to intercept URLs containing a substring in C# using selenium chrome webdriver 4.0.0-beta4. This is what I found and changed a little bit:

using V89 = OpenQA.Selenium.DevTools.V89;
using V89Net = OpenQA.Selenium.DevTools.V89.Network;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.DevTools;

ChromeOptions options = new ChromeOptions();
    ChromeDriver webDriver;
    IDevTools devTools;
    public void InterceptRequestWithFetch(string url)
    {
        options.BinaryLocation = @"C:\Program Files\Google\Chrome Beta\Application\chrome.exe";
        var service = ChromeDriverService.CreateDefaultService();
        service.LogPath = AppDomain.CurrentDomain.BaseDirectory + "chromedriver.log";
        service.EnableVerboseLogging = true;

        webDriver = new ChromeDriver(service, options);

        devTools = webDriver as IDevTools;

        var devToolsSession = devTools.CreateDevToolsSession();
        var fetch = devToolsSession.GetVersionSpecificDomains<V89.DevToolsSessionDomains>().Fetch;

        var enableCommandSettings = new V89.Fetch.EnableCommandSettings();

        var requestPattern = new V89.Fetch.RequestPattern();
        requestPattern.RequestStage = V89.Fetch.RequestStage.Response;
        requestPattern.ResourceType = V89Net.ResourceType.XHR;
        requestPattern.UrlPattern = "*://*/*.jpg*";

        enableCommandSettings.Patterns = new V89.Fetch.RequestPattern[] { requestPattern };

        fetch.Enable(enableCommandSettings);
        fetch.RequestPaused += RequestIntercepted;
        
        webDriver.Navigate().GoToUrl(url);

    }
    void RequestIntercepted(object sender, V89.Fetch.RequestPausedEventArgs e)
    {

        richTextBox1.AppendText(e.Request.Url);
        webDriver.Quit();
    }

The problem is CreateDevToolsSession() does not exists and it seems like GetDevToolsSession() is the only option which does totally different job, but I tried it anyway and then my form froze, and codes past that line never executed.

I searched last three days for a solution but its just CreateDevToolsSession(). How can I use the DevTools if I won't be able to create a session?

1 Answers

This worked for me. Might not be exactly what you want, but it sets up devtools and can do whatever you normally would.

using OpenQA.Selenium.DevTools;
using OpenQA.Selenium.DevTools.V96.Network;
using DevToolsSessionDomains = OpenQA.Selenium.DevTools.V96.DevToolsSessionDomains;


public void DevtoolsExample()
{

    IDevToolsSession session;
    DevToolsSessionDomains devToolsSession;

    //Setup WebDriver and devtools
    driver = new ChromeDriver();
    var baseUrl = ConfigurationHelper.Get<string>("TargetUrl");

    //*this appears to create devtools session or get existing
    IDevTools devTools = driver as IDevTools;
    session = devTools.GetDevToolsSession();

    devToolsSession = session.GetVersionSpecificDomains<DevToolsSessionDomains>();
    devToolsSession.Network.Enable(new EnableCommandSettings());
    devToolsSession.Network.SetBlockedURLs(new SetBlockedURLsCommandSettings()
    {
        Urls = new string[] { "*://*/*.css", "*://*/*.jpg", "*://*/*.png" }
        //Urls = new string[] {  }

    });

driver.Navigate().GoToUrl("https://someUrl.com");
}
Related