VBA просматривает выпадающие элементы с веб-страницы и загружает в лист Excel - PullRequest
1 голос
/ 06 мая 2019

Я хочу выбрать определенный элемент из раскрывающихся элементов на веб-странице amazon.com с помощью VBA. Я хочу выполнить это, когда клиент должен выбрать количество товара, которое он хочет добавить в свою корзину. Как выбрать другое значение, например 3, из раскрывающегося меню с помощью VBA и отобразить значение в листе Excel? На данный момент я всегда получаю значение по умолчанию 1, даже если я установил для другого элемента, который будет выбран.

Sub Basics_Of_Web_Macro()

    Dim myIE As Object
    Dim myIEDoc As Object

    'Start Internet Explorer
    Set myIE = CreateObject("InternetExplorer.Application")

    'if you want to see the window set this to True
    myIE.Visible = False

    'Now we open the page we'd like to use as a source for information
    myIE.navigate "https://www.amazon.com/belif-True-Cream-Aqua-Korean/dp/B00H4GOAZO/ref=pd_cart_crc_cko_cp_2_2/139-8277217-3794320?_encoding=UTF8&pd_rd_i=B00H4GOAZO&pd_rd_r=e154e278-8a11-4ab0-8173-5d0dbaff1938&pd_rd_w=Hm8FW&pd_rd_wg=Hpv4X&pf_rd_p=eff166ab-25d2-4f2c-a51d-0a0e86061f9d&pf_rd_r=EVT26E6K7CV8T1QMTY7H&psc=1&refRID=EVT26E6K7CV8T1QMTY7H"

    'We wait for the Explorer to actually open the page and finish loading
    While myIE.Busy
        DoEvents
    Wend

    'Now lets read the HTML content of the page
    Set myIEDoc = myIE.document

    'Time to grab the information we want
    Set elements = myIEDoc.getElementsByClassName("a-dropdown-prompt")
        If elements.Length > 0 Then
            Range("A1") = elements(2).innerText
        End If

End Sub

Пример исходного кода amazon выглядит примерно так: в раскрывающемся меню примерно 30 элементов для количества, которое можно выбрать:

...

            <div class="a-column a-span12 a-text-left">
                <span class="a-dropdown-container"><label for="quantity" class="a-native-dropdown">Qty:</label><select name="quantity" autocomplete="off" id="quantity" tabIndex="-1" class="a-native-dropdown">                             

                                <option value="1" selected>1
                                </option>
                                 <option value="2" selected>2
                                </option>
                                <option value="3" selected>3
                                </option>

...

1 Ответ

1 голос
/ 06 мая 2019

Обычно вы можете использовать атрибут = значение селектора, чтобы выбрать вариант выбора по его value значению атрибута

myIEDoc.querySelector("#quantity [value='3']").selected = True

Вы можете объединить это значение в

Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub SelectQuantity()
    Dim ie As New InternetExplorer
    Const QTY As Long = 3
    With ie
        .Visible = True
        .Navigate2 "https://www.amazon.com/belif-True-Cream-Aqua-Korean/dp/B00H4GOAZO/ref=pd_cart_crc_cko_cp_2_2/139-8277217-3794320?_encoding=UTF8&pd_rd_i=B00H4GOAZO&pd_rd_r=e154e278-8a11-4ab0-8173-5d0dbaff1938&pd_rd_w=Hm8FW&pd_rd_wg=Hpv4X&pf_rd_p=eff166ab-25d2-4f2c-a51d-0a0e86061f9d&pf_rd_r=EVT26E6K7CV8T1QMTY7H&psc=1&refRID=EVT26E6K7CV8T1QMTY7H"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            .querySelector("#quantity [value='" & QTY & "']").Selected = True
            ActiveSheet.Range("A1") = QTY
            Stop
        End With
    End With
End Sub

Цикл по всему

Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub SelectQuantity()
    Dim ie As New InternetExplorer, numberOfOptions As Long, i As Long

    With ie
        .Visible = True
        .Navigate2 "https://www.amazon.com/belif-True-Cream-Aqua-Korean/dp/B00H4GOAZO/ref=pd_cart_crc_cko_cp_2_2/139-8277217-3794320?_encoding=UTF8&pd_rd_i=B00H4GOAZO&pd_rd_r=e154e278-8a11-4ab0-8173-5d0dbaff1938&pd_rd_w=Hm8FW&pd_rd_wg=Hpv4X&pf_rd_p=eff166ab-25d2-4f2c-a51d-0a0e86061f9d&pf_rd_r=EVT26E6K7CV8T1QMTY7H&psc=1&refRID=EVT26E6K7CV8T1QMTY7H"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            numberOfOptions = .querySelectorAll("#quantity option").Length 'gather option tag element children of parent select element with id quantity
            For i = 1 To numberOfOptions
                .querySelector("#quantity [value='" & i & "']").Selected = True
                ActiveSheet.Cells(i, 1) = i
            Next
            Stop
        End With
    End With
End Sub

Подходит ближе к вашему

Public Sub Basics_Of_Web_Macro()

    Dim myIE As Object
    Const QTY As Long = 3

    'Start Internet Explorer
    Set myIE = CreateObject("InternetExplorer.Application")

    'if you want to see the window set this to True
    myIE.Visible = False

    'Now we open the page we'd like to use as a source for information
    myIE.navigate2 "https://www.amazon.com/belif-True-Cream-Aqua-Korean/dp/B00H4GOAZO/ref=pd_cart_crc_cko_cp_2_2/139-8277217-3794320?_encoding=UTF8&pd_rd_i=B00H4GOAZO&pd_rd_r=e154e278-8a11-4ab0-8173-5d0dbaff1938&pd_rd_w=Hm8FW&pd_rd_wg=Hpv4X&pf_rd_p=eff166ab-25d2-4f2c-a51d-0a0e86061f9d&pf_rd_r=EVT26E6K7CV8T1QMTY7H&psc=1&refRID=EVT26E6K7CV8T1QMTY7H"

    'We wait for the Explorer to actually open the page and finish loading
    While myIE.Busy Or myIE.readyState < 4: DoEvents: Wend

    With myIE.document
        .querySelector("#quantity [value='" & QTY & "']").Selected = True
        ActiveSheet.Range("A1") = QTY
        Stop
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...