2017-07-19 2 views
0

私は以下のコードを使用してサイトから情報を削り取ろうとしていますが、私が指摘した部分では苦労しています。同じコードを何度も何度も繰り返すのではなく、私が望む結果を簡単に得る方法はありますか?どのように多くの結果が得られるかわからないので、その情報を使用することはできません。Webページ間をジャンプするためのFor ... Nextループがありますか?

Dim objIE As InternetExplorer 
Dim y As Integer 
Dim result As String 

Set objIE = New InternetExplorer 

objIE.Visible = True 

objIE.navigate "https://www.searchiqs.com/nyalb/Login.aspx" 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

objIE.document.getElementById("btnGuestLogin").Click 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

objIE.document.getElementById("ContentPlaceHolder1_txtFromDate").Value = "07/01/2017" 

objIE.document.getElementById("ContentPlaceHolder1_txtThruDate").Value = "07/19/2017" 

objIE.document.getElementById("ContentPlaceHolder1_cboDocGroup").Value = "DBA" 

objIE.document.getElementById("ContentPlaceHolder1_cmdSearch").Click 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

y = 1 

' brings up a table of results. I need to click on the view button and get the info from that page 

objIE.document.getElementById("ContentPlaceHolder1_grdResults_btnView_0").Click 


Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

' element ID's are hidden for those looking to help 

result = Trim(objIE.document.getElementById("ContentPlaceHolder1_lblDetails2").innerText) 

Sheets("Sheet1").Range("C" & y).Value = result 

y = y + 1 

' I would love to direct link to the next serch result here but the link does not change between pages so I click the next button 

objIE.document.getElementById("ContentPlaceHolder1_btnNext").Click 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

result = Trim(objIE.document.getElementById("ContentPlaceHolder1_lblDetails2").innerText) 

Sheets("Sheet1").Range("C" & y).Value = result 

y = y + 1 

' and I click the next button again 

objIE.document.getElementById("ContentPlaceHolder1_btnNext").Click 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

result = Trim(objIE.document.getElementById("ContentPlaceHolder1_lblDetails2").innerText) 

Sheets("Sheet1").Range("C" & y).Value = result 

y = y + 1 

'AND AGAIN 

objIE.document.getElementById("ContentPlaceHolder1_btnNext").Click 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 
result = Trim(objIE.document.getElementById("ContentPlaceHolder1_lblDetails2").innerText) 

Sheets("Sheet1").Range("C" & y).Value = result 

y = y + 1 

' You get the idea 

objIE.document.getElementById("ContentPlaceHolder1_btnNext").Click 
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

result = Trim(objIE.document.getElementById("ContentPlaceHolder1_lblDetails2").innerText) 

Sheets("Sheet1").Range("C" & y).Value = result 

' I basically repeat that process til I cant press CTRL V anymore. Is there a loop I can use to tighten this up? 

私に知らせてください。あなたたちは過去に大きな助けをしてきました。私のreadystateループが私に問題を与えているので、XMLメソッドを使うことも有益でしょうか?前もって感謝します。

+0

ウェブページ自体に「次へ」ボタンが表示されなくなるまで、基本的に「次へ」をクリックしていますか?それはあなたがいつ止めるべきかを知る方法です。 – BruceWayne

+1

forループを使用し、ボタンが存在するかどうかを判断するためにgetElementByIdが 'Nothing'を返すかどうかをチェックします。 –

+0

はい次のボタンを除く正しいBruceWayneは、単に非表示になります。それは最後に「何もない」価値を返さないでしょう。 – Chris

答えて

0

これは静的なページセットの場合、必要な反復回数のためのForループです。私たちはもっと簡単にできると信じています。

For y = 1 to 5 
    result =trim(objIE.document.getElementById("ContentPlaceHolder1_lblDetails2").innerText) 
    Sheets("Sheet1").Range("C" & y).Value = result 
    objIE.document.getElementById("ContentPlaceHolder1_btnNext").Click 
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 
next y 
'or if you want it to keep going, something like this 
Do until objIE.document.getElementById("ContentPlaceHolder1_btnNext") is nothing 
    result =trim(objIE.document.getElementById("ContentPlaceHolder1_lblDetails2").innerText) 
     Sheets("Sheet1").Range("C" & y).Value = result 
     objIE.document.getElementById("ContentPlaceHolder1_btnNext").Click 
     Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 
loop 
+0

ありがとうございます。私はこれを使用して、この問題を解決しました。 2番目のコードは、必要なループの正確な数を知らないので使用しました。問題は、次のボタンが「何もない」という値を返すことがないため、手動で停止するまでスクリプトを実行し続けることです。これは問題ありません。あなたはその可能性についての解決策があるかどうか疑問に思っていましたか?最後にボタンが消えるだけです。あなたが望むなら、それを別の質問に入れることができます。 – Chris

+0

喜んで助けてください。ああ、私はそれが最後のクリックで消え去ると、そこにあるかもしれないが見えないと信じていますか? 'next'の前に条件を設定して、それがもう見えないかどうかを見ることができます –

関連する問題