簡體   English   中英

抓取依賴填充下拉列表

[英]Scrape dependent filled Drop-down list

使用 Excel VBA,我希望從兩個下拉列表中抓取值。 一個是州名,另一個是城市。

我可以抓取州名,但是當我嘗試抓取城市名稱時,我什么也得不到。 城市列表根據所選的州填寫。

如何在第一個列表中的每個州的第二個下拉列表中列出每個城市?

這個查詢只給我狀態名稱和第二個列表的默認值:

Sub ScrapDropDown()
    Const URL As String = "http://idebescola.inep.gov.br/ideb/consulta-publica"
    Dim XMLPage As New MSXML2.XMLHTTP60
    Dim HTMLDoc As New MSHTML.HTMLDocument
    XMLPage.Open "GET", URL, False
    XMLPage.send
    HTMLDoc.body.innerHTML = XMLPage.responseText
    Set HTMLDocment = HTMLDoc.getElementById("pkCodEstado")
    For i = 1 To HTMLDocment.Length - 1
        Set HTMLpkCodMunicipio = HTMLDoc.getElementById("pkCodMunicipio")
        For Each HTMLMun In HTMLpkCodMunicipio.getElementsByTagName("option")
            Debug.Print i & "-" & HTMLDocment(i).Value & "-" & HTMLDocment(i).innerText & "-" & HTMLMun.Value & "-" & HTMLMun.innerText
        Next HTMLMun
    Next i
End Sub

我想刮掉帶有下拉列表的 HTML 的一部分(我刪除了另一個不需要的列表的三個點),其中從第一個列表中選擇(現場)一個狀態,而不選擇 id="pkCodMunicipio" 只有一個選項

<form method="post" name="frm" class="classForm" id="frm">
<label for="pkCodEntidade">Por Código</label>
<div class="divRequired">
</div>
<input name="pkCodEntidade" id="pkCodEntidade" placeholder="Código da Escola" title="Por Código" class="onlynumbers" maxlength="8" tabindex="15" type="text" value="">
<hr>
<label id="lbl">Por área de interesse</label>
<div id="lblDivRequired" class="divRequired" style="display: ;">
</div>
<select name="pkCodEstado" id="pkCodEstado" tabindex="16">
<option value="">UF</option>
<option value="12">ACRE</option>
<option value="27">ALAGOAS</option>
<option value="16">AMAPÁ</option>
<option value="13">AMAZONAS</option>
<option value="29">BAHIA</option>
<option value="23">CEARÁ</option>
<option value="53">DISTRITO FEDERAL</option>
<option value="32">ESPÍRITO SANTO</option>
<option value="52">GOIÁS</option>
<option value="21">MARANHÃO</option>
<option value="51">MATO GROSSO</option>
<option value="50">MATO GROSSO DO SUL</option>
<option value="31">MINAS GERAIS</option>
<option value="15">PARÁ</option>
<option value="25">PARAÍBA</option>
<option value="41">PARANÁ</option>
<option value="26">PERNAMBUCO</option>
<option value="22">PIAUÍ</option>
<option value="33">RIO DE JANEIRO</option>
<option value="24">RIO GRANDE DO NORTE</option>
<option value="43">RIO GRANDE DO SUL</option>
<option value="11">RONDÔNIA</option>
<option value="14">RORAIMA</option>
<option value="42">SANTA CATARINA</option>
<option value="35">SÃO PAULO</option>
<option value="28">SERGIPE</option>
<option value="17">TOCANTINS</option>
</select>
<select name="pkCodMunicipio" id="pkCodMunicipio" tabindex="17">
<option value="">Municípios</option>
<option value="1400050">ALTO ALEGRE</option>
<option value="1400027">AMAJARI</option>
<option value="1400100">BOA VISTA</option>
<option value="1400159">BONFIM</option>
<option value="1400175">CANTA</option>
<option value="1400209">CARACARAI</option>
<option value="1400233">CAROEBE</option>
<option value="1400282">IRACEMA</option>
<option value="1400308">MUCAJAI</option>
<option value="1400407">NORMANDIA</option>
<option value="1400456">PACARAIMA</option>
<option value="1400472">RORAINOPOLIS</option>
<option value="1400506">SAO JOAO DA BALIZA</option>
<option value="1400605">SAO LUIZ</option>
<option value="1400704">UIRAMUTA</option>
</select>
...
<button name="btnSearch" class="btnDefault btn btn-warning" title="Buscar" type="submit" id="btnSearch" onclick="void(0);">Buscar</button>
</div>
<input type="hidden" name="undefined" value="undefined">
</form>

您可以使用 css 選擇器組合。 下面使用 id ( # ) 選擇器將父select標記元素與option元素選擇器結合使用,以獲取所有子option標記元素。

Dim nodeList As Object, i As Long
Set nodeList = HTMLDoc.querySelectorAll("#pkCodEstado option")
For i = 0 To nodeList.Length-1
    Debug.Print nodeList.item(i).innerText
Next

i已經在頂部聲明,因此您實際上不需要再次聲明。 您應該在所有模塊的頂部使用Option Explicit ,從而聲明所有變量。 您的代碼中有許多未聲明的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM