我必須登錄到SnapSurveys並每月下載超過20個文件。已經是一個乏味的過程,我現在不得不每週都做一次,而且手工完成這件事情會非常乏味,所以我想將它自動化並安裝Selenium。我已經使用SeleniumIDE(在FireFox中)跟蹤了整個過程,所以我知道我想要做什麼以及如何做到這一點的基本知識,但是,我遇到了一個絕對的磚牆,試圖瞭解網頁結構來實現它。使用VBA和Selenium驅動網站
兩個鍍鉻& Firefox中使用的開發工具,我已經確定的「用戶名」字段,因爲這:
<p>
<label for="UserName">Username</label>
<input data-val="true" data-val-required="The Username field is required." id="UserName" name="UserName" type="text" value="">
<span class="field-validation-valid" data-valmsg-for="UserName" data-valmsg-replace="true"></span>
</p>
我用下面的代碼,試圖找到「用戶名」文本因此我可以在其中輸入數據。我已經試過每個Text
值,反過來,與每個Driver.FindElementBy...
可能性,他們都給予我這個錯誤:
Run-time Error '7':
NoSuchElementError
Element not found for <By type> = <text>
這是代碼:
Private Sub Login()
Const SITE_BASE_NAME As String = "https://www.snapsurveys.com/login"
Dim Driver As IEDriver
Set Driver = New IEDriver
Dim IsSiteLoaded As Boolean
IsSiteLoaded = Driver.Get(SITE_BASE_NAME)
If IsSiteLoaded Then
Dim Text As String
Text = "columns six"
Text = "UserName"
Text = "main"
Text = "//*[@id=""UserName""]"
Dim El As WebElement
Set El = Driver.FindElementByClass(Text)
Set El = Driver.FindElementByCss(Text)
Set El = Driver.FindElementById(Text)
Set El = Driver.FindElementByLinkText(Text)
Set El = Driver.FindElementByName(Text)
Set El = Driver.FindElementByPartialLinkText(Text)
Set El = Driver.FindElementByTag(Text)
Set El = Driver.FindElementByXPath(Text)
End If
Driver.Quit
End Sub
的一個結合我發現了在不給我的錯誤是:
Text = "main"
Set El = Driver.FindElementById(Text)
但只給我麪包屑在頂部屏幕,我不確定如何從那裏得到任何有用的東西。
很顯然,我對網頁設計不夠了解,無法找到我應該尋找的線索,但我認爲我可以通過嘗試和錯誤的方式來減少挫折感。
我需要在頁面源中查找哪些元素,以及FindElementBy
函數需要用來在代碼中搜索它?
此外,填寫用戶名&密碼字段,單擊「登錄」,然後單擊下一頁上的相應鏈接等最好的方式來解決這個問題?我認爲,一旦我登錄自己,我應該能夠獲得我需要的每個文件的鏈接集合,並直接下載每個鏈接,但我不能100%確定如果我可以做到這一點。
一些注意事項:
- 是的,我知道的代碼使用IE作爲瀏覽器。我爲FF & Chrome的驅動程序似乎已過時(瀏覽器打開,但它不會加載網頁),我還沒有得到新的。目前,只要我能使用瀏覽器,我不在乎使用哪種瀏覽器。
- 是的,我意識到我在
Sub
的末尾關閉了瀏覽器。再次,我只是測試,試圖在黑暗中找到我的方式。
謝謝!那就是訣竅。你知道它在'iframe'中,因爲這裏的'page-template-load_iframe'部分:'
'? _我有很多**需要學習!! _ – FreeMan您必須使用瀏覽器中的開發工具來弄清楚。我的方式是通過控制檯(請參閱:http://imgur.com/a/5lBEN),參見頂部img,其中列出了頁面上的所有iframe。然後,如果我選擇一個iframe並查看它,通常它會告訴我我的元素是否在它內部 –