我使用GeckoFX导航到某个网站,要求我登录。到目前为止,导航和登录看起来像这样:
Public Flag_Completed As Boolean = False
...
Navigate("http://www.website.com/loginpage/")
While Not Flag_Completed
Application.DoEvents()
End While
Dim User As GeckoInputElement = GeckoWebBrowser1.Document.GetHtmlElementById("edit-name")
Dim Pass As GeckoInputElement = GeckoWebBrowser1.Document.GetHtmlElementById("edit-pass")
User.Value = "myUsername"
Pass.Value = "myPassword"
Dim Form = CType(GeckoWebBrowser1.Document.Forms(1), GeckoFormElement)
Form.submit()
Flag_Completed = false
While Not Flag_Completed
Application.DoEvents()
End While
...
Public Sub Navigate(ByVal URL As String, Optional ByVal LimitTimeinMinutes As Integer = 1)
Flag_Completed = False
GeckoWebBrowser1.Width = 1920
Application.DoEvents()
Try
GeckoWebBrowser1.Navigate(URL)
Catch ex As Exception
End Try
End Sub
到目前为止,一切似乎都有效,但我无法找到正确下载文件的方法。我尝试将WebClient与DownloadFile()方法结合使用,如下所示:
Dim myWebClient As New WebClient()
myWebClient.DownloadFile("http://www.website.com/path/file.pdf", "C:\Path\to\local\file.pdf")
问题是WebClient没有登录(与我的GeckoFX浏览器(GeckoWebBrowser1)相反。)我最终得到的文件具有.pdf文件扩展名,但在文本编辑器中打开它就清楚了该文件实际上是您在未登录时输入链接时将显示在屏幕上的HTML网页。(有道理)
不幸的是,我已经搜索了一天以上,无法找到我特定问题的答案。在GeckoFX库中似乎没有一个方法可以采用DownloadFile()方法的位置。我在这里找到了以下问题:How to handle downloading in GeckoFX 29这似乎与我的问题相似。遗憾的是,该解决方案针对的是C#中的Windows.Forms应用程序,我似乎无法在我自己的VB.NET控制台应用程序中使用它。这是解决这个问题的正确方法吗?如果有,任何想法?如果没有,究竟是怎么回事?
更新 为了完整起见,我将提到我解决了我的特定问题(在登录后下载PDF)但我没有使用GeckoFX,而是使用WebClient和HttpRequests下载文件。我强烈推荐以下教程解释:http://odetocode.com/Articles/162.aspx