VBA刮片:需要对象

VBA刮片:需要对象,vba,excel,web-scraping,Vba,Excel,Web Scraping,VBA女士说对象是必需的,但当我删除第一行(实际上是第25行)中的(3)时,“一切正常”。它给了我三个MsgBox(1.我想要的链接,2.空的,3.我想要的链接)。因此,最简单的方法是选择第三个选项 我用QHarr实现了代码,但我想从站点的一个页面获取20个链接(下一步将在多个页面上进行),所以我为下一步做了一个简单的示例: Dim oIE As InternetExplorer Dim wwwAdd$, NazwaArk$, AdrStrony$

VBA女士说对象是必需的,但当我删除第一行(实际上是第25行)中的(3)时,“一切正常”。它给了我三个MsgBox(1.我想要的链接,2.空的,3.我想要的链接)。因此,最简单的方法是选择第三个选项


我用QHarr实现了代码,但我想从站点的一个页面获取20个链接(下一步将在多个页面上进行),所以我为下一步做了一个简单的示例:

      Dim oIE As InternetExplorer
        Dim wwwAdd$, NazwaArk$, AdrStrony$
        Dim doc As HTMLDocument

        Dim wElement As HTMLAnchorElement
        Dim row As Long, col%, n%, pozDat% ' co to są te procenty??
        Dim PoprzedniElement As HTMLAnchorElement
        Dim Tekst As String
        Dim NrOferty As Variant
        Dim i, j As Integer
        Dim IleSekund As Integer
        Dim newHour As Variant
        Dim newMinute As Variant
        Dim newSecond As Variant
        Dim waitTime As Variant
        Dim link As Integer
        Dim maxlink As Integer  

Set oIE = New SHDocVw.InternetExplorer
oIE.Visible = True
oIE.Navigate AdrStrony, 2

row = row + 1

Do Until oIE.ReadyState = tagREADYSTATE.READYSTATE_COMPLETE: Loop
Set doc = oIE.Document

      For Each wElement In doc.getElementsByClassName("info")(0).getElementsByTagName("a")(3) ' "a" = a href
        MsgBox (wElement)
        Sheets("Oferty").Cells(1, 1).Value = wElement
        Next wElement
        oIE.Quit
Set oIE=New SHDocVw.InternetExplorer
可见=真实
oIE.Navigate AdrStrony,2'AdrStrony是www网站地址
对于iNo=0到20
与爱
While.Busy或.readyState<4:DoEvents:Wend'我个人不懂这句话
Set doc=oIE.document
对于doc.getElementsByClassName(“info”)(iNo.getElementsByTagName(“a”)中的每个wElement
“MsgBox(wElement)
如果iRow 2像一个符咒一样起作用,那么魔法是如何起作用的呢?它实际上是做什么的?
iRow=iRow+1
错误时继续下一步“新信息:
根据您的新信息,以下是如何使用XHR在没有打开浏览器的情况下获得第一页上列出的20个属性:

Set oIE = New SHDocVw.InternetExplorer
oIE.Visible = True
oIE.Navigate AdrStrony, 2 'AdrStrony is the the www site address

For iNo = 0 To 20
 With oIE
        While .Busy Or .readyState < 4: DoEvents: Wend 'I personally don't understand this line
        Set doc = oIE.document
        For Each wElement In doc.getElementsByClassName("info")(iNo).getElementsByTagName("a")
        'MsgBox (wElement)
            If iRow <> 2 Then 'Works like a charm, but how the magic works? What it does actually?
                iRow = iRow + 1
                On Error Resume Next '<=In case no href attribute
                Worksheets("Oferty").Cells(iRow, 1) = wElement.getAttribute("href")
                'Worksheets("Oferty").Cells(iRow, 1) = wElement.innerText
                On Error GoTo 0
            End If
            .Quit
        Next wElement

        'other code

    End With
Next iNo
它不像
那样健壮。分页li:n最后一个子项(3)
,但VBA似乎不支持该选择器


浏览器也有同样的功能:

Dim numPages As Long
numPages = html.querySelectorAll(".pagination li")(6).innerText

问题是什么?第一行没有“3”字:“Dim oIE As Internet Explorer”@SolarMike我猜他在这行中的意思是
doc.getElementsByClassName(“info”)(0)。getelementsbycytagname(“a”)(3)
@Pᴇʜ这不是第一行。。。我确实看到了,但大约在第25行。。。指出正确的方向会有帮助…@BartBart
MsgBox(doc.getElementsByClassName(“info”)(0.getElementsByClassName(“a”)(3))
说什么?谢谢你的帮助。它部分起作用。我还需要更多的解释:你想知道什么?:-)我编辑了主要的帖子,现在它和你的相关。此外,我在评论中又添加了两个问题。使用URL进行测试,弄清楚发生了什么有点困难。你说你现在想要20个链接?这与原来的三分之二有什么关系?请显示页面中的一些HTML,指明您要查找的链接?通常提出一个新问题比改变问题更符合礼仪,尤其是如果人们已经回答了你现有的问题,而不是改变问题。bit.ly/2Ls6NT7-以下是与www.ok的链接,我会记住的。
Dim numPages As Long
numPages = html.querySelectorAll(".pagination li")(6).innerText
Option Explicit
Public Sub SubCentalineAutomation()
    Dim myIE As InternetExplorer, propertyList As Object, i As Long
    Const BASE_URL As String = "http://www.kontrakt.szczecin.pl"
    Set myIE = New InternetExplorer

    With myIE
        .navigate "http://www.kontrakt.szczecin.pl/lista-ofert/?f_location_locality[0]=szczecin&submit=Szukaj&offset=0"
        .Visible = True
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set propertyList = .document.querySelectorAll("#properties header > a")
        For i = 0 To propertyList.Length - 1
                 Debug.Print BASE_URL & propertyList.item(i).getAttribute("href")
        Next i

        '.Quit '<== Remember to quit application
    End With

End Sub
Option Explicit
Public Sub test1()
    'Other code
    Dim iRow
    With oIE
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set doc = oIE.document
        For Each wElement In doc.getElementsByClassName("info")(0).getElementsByTagName("a")
            If iRow <> 2 Then
                iRow = iRow + 1
                On Error Resume Next '<=In case no href attribute
                Worksheets("Oferty").Cells(iRow, 1) = wElement.getAttribute("href")
                ' Worksheets("Oferty").Cells(iRow, 1) = wElement.innerText
                On Error GoTo 0
            End If
        Next wElement

        'other code
        .Quit
    End With
End Sub