2017-09-11 78 views
-4

我已經創建了一個vba中的刮板結合硒來解析網頁中的不同公司名稱。該頁面已經遍歷了56個可以使用前進按鈕到達的頁面。我的刮板目前能夠在do循環的幫助下抓取這57頁中的所有數據。但是,我在這裏面臨的問題是,當完成收集所有數據時,我的腳本無法擺脫循環。這是因爲我在循環中使用了「Do while True」條件。我應該在這種情況下做什麼,以便我的腳本能夠在完成時打破循環並退出瀏覽器?提前致謝。如何在完成時打破循環?

這是我到目前爲止已經寫的:

Sub jscriptinjected_data() 

    Dim driver As New ChromeDriver 
    Dim posts As Object, post As Object 

    With driver 
      .Get "http://registers.centralbank.ie/FundSearchResultsPage.aspx?searchEntity=FundServiceProvider&searchType=Name&searchText=&registers=6%2c29%2c44%2c45&AspxAutoDetectCookieSupport=1" 

     Do While True 
      Set posts = .FindElementsByClass("entityNameColumn") 
      For Each post In posts 
       x = x + 1: Cells(x, 1) = post.FindElementByTag("a").Text 
      Next post 
      .FindElementById("ctl00_cphRegistersMasterPage_gvwSearchResults_ctl18_btnNext").Click 
     Loop 
    End With 

    driver.Quit 
End Sub 
+0

'退出做'當'帖子'是'沒有'?刪除'While True'並添加'Loop Until posts is Nothing'? – GSerg

+0

順便說一下,當它碰到包含'click'選項的行時,就會拋出錯誤。 – SIM

+1

將常識應用於以前的建議?如果'posts'永遠不是'Nothing',而是測試它所具有的意味着它是空的? – GSerg

回答

4

As GSerg suggested,爆發時posts Is Nothing - 如果API拋出一個錯誤時,有「沒有這樣的元素」,然後處理它!

Do While True...Loop構造只是奇怪;如果你需要一個無限循環只是做Do...Loop

Do 
    Set posts = .FindElementsByClass("entityNameColumn") 
    '... 
    On Error Resume Next 
    .FindElementById("ctl00_cphRegistersMasterPage_gvwSearchResults_ctl18_btnNext").Click 
    If Err.Number <> 0 Then Exit Do 
    On Error GoTo 0 

Loop 
+0

應在'.FindElementById(「ctl00_cphRegistersMasterPage_gvwSearchResults_ctl18_btnNext」)處捕獲錯誤。單擊它出現的位置,因爲在最後一頁沒有下一頁。 – BitAccesser

+0

無論如何。相同的想法/原則。 –

+0

是的,但是你的代碼不會在'On Error GoTo 0'後出現錯誤。 – BitAccesser