2017-02-06 4 views
0

の各要素を選択されていないと、ロボットは抽出を行うためにコンボボックスの各要素を選択するように機能していません。ロボットは、私はVBA/Excelを使用して簡単なウェブスクレイピングをやっているコンボボックス(VBA /エクセル/ウェブスクレイピング)

コード怒鳴るのパート:

Set evtprod = IE.Document.createEvent("HTMLEvents") 
evtprod.initEvent "change", True, False 

Set lstprod = IE.Document.getElementById(var2) 

Set contr = IE.Document.getElementById(var2) 
contrn = contr.Length 

While iprod < contrn 

    lstprod.selectedIndex = iprod 
    lstprod.dispatchEvent evtprod 

    Sleep 300 

    Do 
     DoEvents 
     Sleep 300 
    Loop While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE 

    ThisWorkbook.Sheets("plan2").Cells(iLineprod, 2) = IE.Document.All.Item("ddlprod").Item(iprod).Value 

    Set divs = IE.Document.getElementById("bxcategory") 
    value = divs.innertext 

    ThisWorkbook.Sheets("plan2").Cells(iLineprod, 5) = Value 

    iprod = iprod + 1 
    iLineprod = iLineprod + 1 

Wend 

私はコード「lstprod.selectedIndex = iprod」と間違って何かあると信じて、私は手動で番号2、「lstprodによってインスタンスのiprodを変更したときからです。 selectedIndex = 2 "それはcomboxの2番目の要素を選択しますが、介入していません。あるいは、問題は "lstprod.dispatchEvent evtprod"です。

これを理解する方法はありますか。

ありがとうございます

+0

あなたがスクラップしようとしているウェブサイトは何ですか? –

答えて

0

私が取ったアプローチはここにあります。

1)は、ページデータをプルするGETリクエストを作成します。

2)が一時HTMLファイルにページデータを保管していました。

3)は、そのIDの一部であるすべてのオプションタグを引いた後、ドロップダウンのIDを見つけるために、要素のセレクタを使用します。作業するには、以下の解決策については

、最初MSXML2.ServerXMLHTTP60への参照を追加しますが、そうでない場合は、コードを実行している問題に実行されます。

私は、例えば、あなたが目に見える値(InnerTextプロパティを)見たいと思った場合は確認されませんでしたAlphavilleまたはその下にある値0106ですから、両方を表示する方法を示しました。

Option Explicit 

Public Sub getWebData() 
On Error GoTo errhand: 
    Dim getReq   As New MSXML2.ServerXMLHTTP60 'Add a reference! 
    Dim doc    As Object: Set doc = CreateObject("htmlfile") 
    Dim Elements  As Object 
    Dim Element   As Object 

    With getReq 
     .Open "GET", "www.somewebsite.com" 'removed actual site URL 
     .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" 
     .send 
     .waitForResponse 2 
    End With 
    If getReq.Status = 200 Then 'if successful 
     doc.body.innerHTML = getReq.responseText 
     Set Elements = doc.getElementById("campusDropDownList").getElementsByTagName("option") 
     For Each Element In Elements 
      Debug.Print Element.Value, Element.innerText 
     Next 
    End If 
    Exit Sub 
errhand: 
    Debug.Print Err.Description, Err.Number 
End Sub 
+0

こんにちはRyan回答ありがとうございますが、ウェブサイトが変更されたように見えて、私のコードはもう役に立たないようです。上記のコードを使用してデータを抽出することは可能ですか? –

+0

誰かが自分のウェブサイトを大幅に変更することにした場合、はい、これはうまくいかないでしょう。しかし、それはどんなアプローチにも当てはまります。コードは今動作しますか? –

+0

現時点では動作していませんが、あなたの助けは本当に良かったです。ありがとうございました –

関連する問題