Для определенного сайта, содержащего много ресурсов, мне нужно автоматизировать процесс получения 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 ресурсов.
Здесь необходимо решить три основные проблемы:
- Когда страница извлекается из локального кэша браузера, появляется сообщение, что в журнал не выводится
- Кажется, нет способа установить
LogLevel
, хотя мой код пытается сделать это рано - Эти журналы не являются URL ресурсов
Как я могу получить URL-адреса на вкладке DevTools Network?Я нашел этот быстрый образец - на самом деле он вдохновил мой код выше - но он использует Java SDK.Два API кажутся немного разными.