при компиляции следующего кода у меня есть переменная объекта ошибки или не установлена ​​переменная блока - PullRequest
1 голос
/ 11 февраля 2020
 Sub GetJobDetails()
 Const URL$ = "https://www.linkedin.com/jobs/search/?geoId=103644278&keywords=nav&location=United%20States&start="
 Dim IE As Object: Set IE = CreateObject("InternetExplorer.Application")
 Dim post As Object, elem$, R&, I&: I = 0
 Do
    With IE
        .Visible = True
        .navigate URL & I
        While .Busy Or .readyState < 4: DoEvents: Wend

        On Error Resume Next
        elem = .document.getElementsByTagName("li")(0).innerText
        On Error GoTo 0

        If elem = "" Then Exit Do

        For Each post In .document.getElementsByTagName("li")
            R = R + 1: Cells(R, 1) = post.getElementsByClassName("js_focusable")(0).innerText          
Cells(R, 2) = post.getElementsByClassName("job-card-search__company-name-link")(0).innerText                   
    Cells(R, 3) = post.getElementsByClassName("job-card-search__location")(0).innerText
    Next post
    End With
    I = I + 25
    elem = ""
    Application.Wait Now + TimeValue("00:00:05")
    Loop
    IE.Quit
 End Sub

что именно

«Переменная объекта или переменная блока не установлена»

означает, что URL может быть неправильным, URL будет динамически изменяться как и в прошлом "start = 25/50/75"

1 Ответ

2 голосов
/ 11 февраля 2020

Чтобы получить контент со следующих страниц, сначала необходимо войти на этот сайт. Хорошая новость заключается в том, что вы можете анализировать контент с его целевой страницы, используя xhr, что намного быстрее, чем IE.

Рабочий скрипт (контент только с первой страницы):

Sub GetJobDetails()
    Const URL$ = "https://www.linkedin.com/jobs/search/?geoId=103644278&keywords=nav&location=United%20States&start=0&redirect=false&position=1&pageNum=0"
    Dim Html As New HTMLDocument, Htmldoc As New HTMLDocument
    Dim I&, R&

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .setRequestHeader "User-Agent", "Mozilla/5.0"
        .send
        Html.body.innerHTML = .responseText

        With Html.querySelectorAll("li.job-result-card")
            For I = 0 To .Length - 1
                Htmldoc.body.innerHTML = .Item(I).outerHTML
                R = R + 1: Cells(R, 1) = Htmldoc.querySelector(".screen-reader-text").innerText
                On Error Resume Next
                Cells(R, 2) = Htmldoc.querySelector("h4.result-card__subtitle > a").innerText
                On Error GoTo 0
                Cells(R, 3) = Htmldoc.querySelector("span.job-result-card__location").innerText
            Next I
        End With
    End With
End Sub

До выполняя вышеупомянутый скрипт, убедитесь, что добавили следующую ссылку:

Microsoft HTML Object Library

Еще раз, вам нужно войти на этот сайт, чтобы проанализировать контент со следующих страниц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...