Мои попытки написать простой сканер, похоже, смущены тем фактом, что моя целевая веб-страница (как будет отображаться в элементе управления браузера UI или через обычное приложение браузера) не полностью доступна в виде HTMLDocument (из-за фреймов,javascript и т. д.)
Приведенный ниже код выполняется, и правильная веб-страница (например, отображающая элементы 50–59) может даже отображаться в элементе управления, но где я ожидаю получить гиперссылку «следующая страница»чтобы быть «... & start = 60», я вижу кое-что еще - то, что соответствует открытию первой страницы каталога «... & start = 10».Странно то, что если я нажму кнопку еще раз, я получу то, что ищу.Даже странно, если я вставлю MsgBox, скажу сразу после того, как я зациклился на ожидании, пока WebBrowserReadyState.Complete, тогда я получу то, что ищу.
Private Sub ButtonGo_Click(sender As System.Object, e As System.EventArgs) Handles ButtonGo.Click
'start at this URL
'e.g. http://www.somewebsite.com/properties?l=Dallas+TX&co=US&start=50
catalogPageURL = TextBoxInitialURL.Text
WebBrowser1.Navigate(catalogPageURL)
While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
'Locate the URL associated with the NEXT>> hyperlink
Dim allLinksInDocument As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("a")
Dim strNextPgLink As String = ""
For Each link As HtmlElement In allLinksInDocument
If link.GetAttribute("className") = "next" Then
strNextPgLink = link.GetAttribute("href")
End If
Next
End Sub
Я достаточно погуглилпопробовать что-то вроде использования события WebBrowser1.DocumentCompleted, но это все равно не сработало.Я попытался вставить команды сна.
Я избегал использования WebClient и регулярных выражений, как я обычно это делал, потому что я убежден, что использование DOM будет проще для других вещей, которые я запланировалв будущем, и я знаю HTML Agility Pack, но не достаточно амбициозен, чтобы изучить его.Поскольку кажется, что должен быть простой способ синхронизировать этот dang webbrowser.document объект с тем, что вы действительно можете увидеть.
Если это из-за javascript, есть ли способ, которым я могу сказать веб-браузеру:просто выполнить их все?
Первый вопрос на форуме, с нетерпением жду еще (умнее, надеюсь)