Заполните веб-форму в MS Excel VBA молча - PullRequest
0 голосов
/ 29 марта 2019

Я изучаю VBA.

Я хочу заполнить веб-форму в тишине, например,

Set IE = CreateObject("internet explorer.Application")
IE.VIsible = False

Когда я загружаю URL, он говорит, что я должен использовать другой браузер, чтобы открыть его.

Я хочу сделать его совместимым с любой ОС. Я нашел это

ActiveWorkbook.FollowLinkAddress "myurl.com"

но я не знаю, как установить его в переменную типа

Set IE = ActiveWorkbook.FollowLinkAddress "myurl.com"
IE.Visible = false

Тогда я могу делать такие вещи, как заполнить поле ввода, нажимать кнопки, .....

Set btn = IE.getElementById(...........
btn.Click = true

Этот URL вызывает у меня головную боль:

https://sellercentral.amazon.com/hz/fba/profitabilitycalculator/index?lang=en_US

1 Ответ

4 голосов
/ 29 марта 2019

Использование гиперссылки не очень хороший способ. Вы хотите программно взаимодействовать с веб-страницей, поэтому вам нужен автоматический браузер. IE работает просто отлично. Я предполагаю, что это опечатка, где вы пишете internet explorer.Application как InternetExplorer.Application.


Примечание: я показываю код для поиска браузера по умолчанию в конце, если вы решите написать разветвленный код для разных браузеров, установив selenium basic.


У вас должно быть правильное ожидание загрузки страницы

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

после нажатия кнопки отправки, но здесь вы также можете отслеживать одно из свойств страницы на предмет изменения, указывающего, что загрузка завершена (изменение атрибута стиля)


Internet Explorer:

Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
'
Public Sub UseIE()
    Dim ie As New InternetExplorer
    With ie
        .Visible = False
        .Navigate2 "https://sellercentral.amazon.com/hz/fba/profitabilitycalculator/index?lang=en_US"

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

        .document.getElementById("search-string").Value = "1408893339"
        .document.querySelector("#a-autoid-1 .a-button-input").Click

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

        Do
        Loop While .document.querySelector("#searchProduct").Style = "display: block;"

        Debug.Print .document.querySelector("#product-info").innerText

        Stop
        .Quit
    End With
End Sub

Другие браузеры, использующие селен:

Если вы хотите использовать альтернативные браузеры, рассмотрите selenium basic vba , который расширяет выбор браузера для Opera, Chrome, FireFox, PhantomJS и других. После установки селен убедитесь, что последний применимый драйвер, например. ChromeDriver.exe находится в папке selenium, затем перейдите в VBE> Инструменты> Ссылки> Добавить ссылку в Selenium Type Library.

Пример селен с хромом:

Option Explicit 
Public Sub EnterInfo()
    Dim d As WebDriver
    Set d = New ChromeDriver
    Const URL = "https://sellercentral.amazon.com/hz/fba/profitabilitycalculator/index?lang=en_US"

    With d
        .AddArgument "--headless"
        .Start "Chrome"
        .get URL
        .FindElementById("search-string").SendKeys "1408893339"
        .FindElementByCss("#a-autoid-1 .a-button-input").Click

        Do
        Loop While .FindElementByCss("#searchProduct").Attribute("Style") = "display: block;"

        Debug.Print .FindElementById("product-info").Text

        Stop                                     '<==delete me later
        .Quit
    End With
End Sub

Определение браузера по умолчанию:

Если вы действительно хотите написать какой-то сложный код для определения браузера по умолчанию, вы можете получить подробную информацию о нем из реестра, а затем использовать разветвленный код для запуска соответствующего браузера (если это можно автоматизировать). Вы можете изменить следующий пример быстрого теста на функцию, которая возвращает тип браузера. Вам потребуется установленный селен, чтобы использовать браузеры, отличные от IE.

Примечание: вероятно, есть лучший способ использования ProgID .

Public Sub Test()
    Dim defaultBrowserInfo As String, browsers(), i As Long, found As Boolean, browser As String
    browsers = Array("Chrome", "InternetExplorer", "FireFox")

    defaultBrowserInfo = CreateObject("wscript.shell").exec("cmd /c REG QUERY HKEY_CLASSES_ROOT\http\shell\open\command").StdOut.ReadAll
    For i = LBound(browsers) To UBound(browsers)
        If InStr(defaultBrowserInfo, browsers(i)) > 0 Then
            found = True
            browser = browsers(i)
            Exit For
        End If
    Next
    If Not found Then
        MsgBox "Browser not in list supplied"
    Else
       MsgBox browser
    End If
End Sub

Изменение строки cmd на

REG QUERY HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\As
sociations\UrlAssociations\http\UserChoice

или

REG QUERY HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\As
sociations\UrlAssociations\https\UserChoice

возвращает progId.

Пример возврата:

enter image description here

Хотя с использованием C # есть хорошая структура кода здесь .

...