2017-05-05 122 views
0

我必須登錄到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的末尾關閉了瀏覽器。再次,我只是測試,試圖在黑暗中找到我的方式。

回答

1

登錄功能位於iframe之內。您必須將硒的焦點切換到該iframe,然後再試一次,它應該可以工作。

你可以試試這個:硒自動化打交道時

Driver.switchtoframe (0) 
Driver.FindElementById("UserName") 

網頁設計有些知識可以幫助一個很長的路要走,但只是一些基本的知識,你可以很容易地得到所做的工作。

你應該尋找什麼元素取決於你想要達到的目標。如果您想在文本字段中輸入內容,則應該查找<input type="text">元素,對於表格,您需要查找<table>元素。

我通常喜歡與XPath使用find元素,但如果該元素在網頁上唯一idclass,您可以使用類名稱查找元素或ID查找元素。

你似乎正走在正確的軌道上來自動化你的任務。

+0

謝謝!那就是訣竅。你知道它在'iframe'中,因爲這裏的'page-template-load_iframe'部分:''? _我有很多**需要學習!! _ – FreeMan

+0

您必須使用瀏覽器中的開發工具來弄清楚。我的方式是通過控制檯(請參閱:http://imgur.com/a/5lBEN),參見頂部img,其中列出了頁面上的所有iframe。然後,如果我選擇一個iframe並查看它,通常它會告訴我我的元素是否在它內部 –