c# - IDevTools 实例不包含 CreateDevToolsSession 方法

标签 c# winforms selenium selenium-webdriver selenium-chromedriver

我正在尝试使用 selenium chrome webdriver 4.0.0-beta4 拦截包含 C# 中的子字符串的 URL。 这是我发现并改变了一点:

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();
    }

问题是 CreateDevToolsSession() 不存在,似乎 GetDevToolsSession() 是唯一执行完全不同工作的选项,但我还是尝试了它,然后我的表单卡住了,并且该行之后的代码从未执行。

过去三天我搜索了一个解决方案,但它只是 CreateDevToolsSession()。如果我无法创建 session ,如何使用 DevTools?

最佳答案

这对我有用。可能不完全是你想要的,但它设置了开发工具,并且可以做你通常会做的任何事情。

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");
}

关于c# - IDevTools 实例不包含 CreateDevToolsSession 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68658513/

相关文章:

c# - 更改 WCF 中的默认日期序列化

c# - 将 -1 转换为 uint32 的目的?

database - 简单的 VB 2010 应用程序不将数据保存到 Access 2007

c# - 在 Winforms RichTextBox 控件中,如何使最后一行链接下方的空间不可单击?

django - Docker、Django 和 Selenium - Selenium 无法连接

c# - 递归的任何其他原因是否会导致堆栈溢出?

c# - Microsoft.EntityFrameworkCore 未安装并卡在 Web API .NET Core 应用程序中 - Visual Studio 2019

vb.net - 如何在 TableLayoutPanel 中设置行高

java - 从 IDE 生成的基本 Selenium Java 不工作

python - Docker Selenium : selenium. common.exceptions.WebDriverException : Message: Service chromedriver unexpectedly exited. 状态代码为:127