Проблемы с выполнением JavaScript в IE - PullRequest
1 голос
/ 09 марта 2019

Я создал скрипт в vba, используя IE, чтобы щелкнуть вкладку на веб-странице.Я хотел бы знать, как я могу инициировать нажатие на эту вкладку, используя .execScript.

Когда я пытаюсь, как показано ниже, это работает (не желательный подход):

Sub ExecuteScript()
    Dim IE As New InternetExplorer, Html As HTMLDocument

    With IE
        .Visible = True
        .navigate "https://stackoverflow.com/questions/tagged/web-scraping"
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set Html = .document
        Html.parentWindow.execScript "document.querySelector(""a[href='/questions/ask']"").click();"
    End With
End Sub

СпособЯ хотел бы сделать следующее, чтобы я мог использовать переменную объекта (смежный или внутри) .execScript:

Set post = Html.querySelector("a[href='/questions/ask']")
Html.parentWindow.execScript "arguments[0].click();", post

Но он выдает ошибку, указывающую на эту строку Html.parentWindow.execScript

Run-time error `429`
ActiveX component can't create object

Как выполнить JavaScript в IE?

1 Ответ

1 голос
/ 09 марта 2019

Почему бы не изменить тип переменной, чтобы вы могли передать post в виде строки (т. Е. Селектора).Затем вы можете объединить в.

Option Explicit
Public Sub ExecuteAScript()
    Dim IE As New InternetExplorer, Html As HTMLDocument, post As String, item As Object
    post = "a[href='/questions/ask']"

    With IE
        .Visible = True
        .navigate "https://stackoverflow.com/questions/tagged/web-scraping"
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set Html = .document
        Do
            On Error Resume Next
            Set item = .document.querySelector("" & post & "")
            On Error GoTo 0
        Loop While item Is Nothing

        If Not item Is Nothing Then item.Click

        Stop
    End With
End Sub

Если вы должны использовать execScript Я не думаю, что вы можете передать значения обратно с помощью вызова javascript return, как с селеном.Вы можете добавить значение на страницу с помощью js, а затем прочитать его обратно, чтобы получить:

Option Explicit
Public Sub ExecuteAScript()
    Dim IE As New InternetExplorer
    post = "a[href='/questions/ask']"

    With IE
        .Visible = True
        .navigate "https://stackoverflow.com/questions/tagged/web-scraping"
        While .Busy Or .readyState < 4: DoEvents: Wend
        Do
            Call .document.parentWindow.execScript("document.title = document.querySelectorAll(" & Chr$(34) & post & Chr$(34) & ").length;")
        Loop While .document.Title = 0
        If IsNumeric(.document.Title) And .document.Title > 0 Then Debug.Print "Success"
    End With
End Sub
...