Как получить URL-адреса на вкладке Chrome DevTools Network? - PullRequest
0 голосов
/ 26 февраля 2019

Для определенного сайта, содержащего много ресурсов, мне нужно автоматизировать процесс получения URL-адресов всех ресурсов.Чтобы усложнить ситуацию, эти URL-адреса не содержатся в изначально загруженной разметке, а вместо этого вставляются в DOM через JavaScript, основываясь на взаимодействии пользователя со страницей.

Поэтому я должен получить результаты на вкладке Сеть в Chrome DevTools.,Но я с трудом начинаю.

Вот моя первая попытка:

Imports System.Text
Imports OpenQA.Selenium
Imports OpenQA.Selenium.Chrome
Imports OpenQA.Selenium.Support.UI

Friend Module Main
  Public Sub Main()
    Dim oBuilder As StringBuilder
    Dim oOptions As ChromeOptions
    Dim oDriver As IWebDriver
    Dim oWait As WebDriverWait
    Dim sType As String

    sType = LogType.Browser

    oBuilder = New StringBuilder

    oOptions = New ChromeOptions
    oOptions.SetLoggingPreference(sType, LogLevel.All)

    oDriver = New ChromeDriver(oOptions)
    oDriver.Navigate.GoToUrl("http://example.com")

    oWait = New WebDriverWait(oDriver, TimeSpan.FromSeconds(15))
    oWait.Until(Function(Driver) Driver.FindElement(By.TagName("a")))

    oDriver.Manage.Logs.GetLog(sType).ToList.ForEach(Sub(Log)
                                                       oBuilder.AppendLine($"Level:   {Log.Level}")
                                                       oBuilder.AppendLine($"Message: {Log.Message}")
                                                     End Sub)

    Console.WriteLine(oBuilder.ToString)
  End Sub
End Module

При первом запуске этого кода StringBuilder содержал только один LogEntry:

Timestamp            Level  Message
---------            -----  -------
2/25/2019 5:05:05 PM Severe http://example.com/favicon.ico - Failed to load resource: the server responded with a status of 404 (Not Found)

Однако с момента первого запуска журналы не извлекаются.Более того, это не тот журнал, который мне нужен.Мне нужны URL ресурсов.

Здесь необходимо решить три основные проблемы:

  1. Когда страница извлекается из локального кэша браузера, появляется сообщение, что в журнал не выводится
  2. Кажется, нет способа установить LogLevel, хотя мой код пытается сделать это рано
  3. Эти журналы не являются URL ресурсов

Как я могу получить URL-адреса на вкладке DevTools Network?Я нашел этот быстрый образец - на самом деле он вдохновил мой код выше - но он использует Java SDK.Два API кажутся немного разными.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

С Selenium вы можете получить все ресурсы, используя журналы браузера.

 def get_logs(self):
        logs = self.browser.get_log('performance')
        return logs
0 голосов
/ 28 февраля 2019

Согласно Как установить настройки Chrome с помощью привязки Selenium Webdriver .NET? вам понадобится собственный класс, например

public class ChromeOptionsWithPrefs: ChromeOptions
{
    public Dictionary<string,object> prefs { get; set; }
}

public static void Initialize()
{
    var options = new ChromeOptionsWithPrefs();
    options.prefs = new Dictionary<string, object>
    {
        { "enableNetwork", true },
        { "traceCategories", "netlog,devtools.timeline,devtools" }
    };
    _driver = new ChromeDriver(@"C:\path\chromedriver", options);
}

Я не могу проверить код, но в Java вам нужночтобы включить протоколирование сети просто так.Категории трассировки можно найти с помощью псевдо-URL chrome://tracing/ в Chrome.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...