Web scraping 循环浏览网站链接并获取PDF';这是我的电脑

Web scraping 循环浏览网站链接并获取PDF';这是我的电脑,web-scraping,vbscript,web-crawler,Web Scraping,Vbscript,Web Crawler,这个话题与 我正在尝试将当前的VBA代码转换为VBScript。我已经明白了,我必须删除变量类型(作为Dim语句的一部分),并使用CreatObject来获取这些对象,否则一切都应该按原样移植。DoEvents还必须替换为Wscript.sleep之类的东西 我提出了一些问题。当前,在运行VBS文件时,我收到一个错误,提示“需要对象:'MSHTML'”。指向第65行,在那里我设置了hDoc=MSHTML.HTMLDocument。我曾尝试在谷歌上搜索,但这次没有任何帮助 我该如何处理这件事 Do

这个话题与

我正在尝试将当前的VBA代码转换为VBScript。我已经明白了,我必须删除变量类型(作为Dim语句的一部分),并使用CreatObject来获取这些对象,否则一切都应该按原样移植。DoEvents还必须替换为Wscript.sleep之类的东西

我提出了一些问题。当前,在运行VBS文件时,我收到一个错误,提示“需要对象:'MSHTML'”。指向第65行,在那里我设置了hDoc=MSHTML.HTMLDocument。我曾尝试在谷歌上搜索,但这次没有任何帮助

我该如何处理这件事

DownloadFiles("https://www.nordicwater.com/products/waste-water/")

Sub DownloadFiles(p_sURL)
    Set xHttp = CreateObject("Microsoft.XMLHTTP")
    Dim xHttp 
    Dim hDoc
    Dim Anchors 
    Dim Anchor 
    Dim sPath
    Dim wholeURL

    Dim internet
    Dim internetdata
    Dim internetlink
    Dim internetinnerlink 
    Dim arrLinks 
    Dim sLink 
    Dim iLinkCount 
    Dim iCounter 
    Dim sLinks

    Set internet = CreateObject("InternetExplorer.Application")
    internet.Visible = False
    internet.navigate (p_sURL)

        Do Until internet.ReadyState = 4
        Wscript.Sleep 100
        Loop

        Set internetdata = internet.document
        Set internetlink = internetdata.getElementsByTagName("a")

        i = 1

        For Each internetinnerlink In internetlink
            If Left(internetinnerlink, 36) = "https://www.nordicwater.com/product/" Then

                If sLinks <> "" Then sLinks = sLinks & vbCrLf
                sLinks = sLinks & internetinnerlink.href
                i = i + 1

            Else
            End If

    Next

    wholeURL = "https://www.nordicwater.com/"
    sPath = "C:\temp\"

    arrLinks = Split(sLinks, vbCrLf)
    iLinkCount = UBound(arrLinks) + 1

    For iCounter = 1 To iLinkCount
    sLink = arrLinks(iCounter - 1)
        'Get the directory listing
        xHttp.Open "GET", sLink
        xHttp.send

        'Wait for the page to load
        Do Until xHttp.ReadyState = 4
        Wscript.Sleep 100
        Loop

        'Put the page in an HTML document
        Set hDoc = MSHTML.HTMLDocument
        hDoc.body.innerHTML = xHttp.responseText

        'Loop through the hyperlinks on the directory listing
        Set Anchors = hDoc.getElementsByTagName("a")

        For Each Anchor In Anchors

            'test the pathname to see if it matches your pattern
            If Anchor.pathname Like "*.pdf" Then

                xHttp.Open "GET", wholeURL & Anchor.pathname, False
                xHttp.send

                With CreateObject("Adodb.Stream")
                    .Type = 1
                    .Open
                    .write xHttp.responseBody
                    .SaveToFile sPath & getName(wholeURL & Anchor.pathname), 2 '//overwrite
                End With

            End If

        Next

    Next

End Sub

使用以下命令代替
Set hDoc=MSHTML.HTMLDocument

Set hDoc = CreateObject("htmlfile")
在VBA/VB6中,可以指定变量和对象类型,但不能使用VBScript。您必须使用
CreateObject
(或
GetObject
:)来实例化对象,例如
MSHTML.HTMLDocument
Microsoft.XMLHTTP
InternetExplorer.Application
,而不是将那些使用
Dim objIE的对象声明为InternetExplorer.Application

另一个变化:

如果Anchor.pathname类似“*.pdf”,则

可以使用以下命令编写:

或使用:

此外,在sub开始时,您要执行以下操作:

Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim xHttp 
在分配变量值或对象之前,应先声明变量。在VBScript中,这是非常轻松的,因为VBScript将为您创建未定义的变量,所以您的代码可以工作,但最好在使用变量之前对其进行
Dim


除了
Wscript.sleep
命令外,您的VBScript代码将在VB6/VBA中工作,因此您可以在VB6或VBA应用程序(如Excel)中调试脚本。

而不是
设置hDoc=MSHTML.HTMLDocument
,使用:

Set hDoc = CreateObject("htmlfile")
在VBA/VB6中,可以指定变量和对象类型,但不能使用VBScript。您必须使用
CreateObject
(或
GetObject
:)来实例化对象,例如
MSHTML.HTMLDocument
Microsoft.XMLHTTP
InternetExplorer.Application
,而不是将那些使用
Dim objIE的对象声明为InternetExplorer.Application

另一个变化:

如果Anchor.pathname类似“*.pdf”,则

可以使用以下命令编写:

或使用:

此外,在sub开始时,您要执行以下操作:

Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim xHttp 
在分配变量值或对象之前,应先声明变量。在VBScript中,这是非常轻松的,因为VBScript将为您创建未定义的变量,所以您的代码可以工作,但最好在使用变量之前对其进行
Dim


除了
Wscript.sleep
命令外,VBScript代码将在VB6/VBA中工作,因此您可以在VB6或VBA应用程序(如Excel)中调试脚本。

使用
Set hDoc=CreateObject(“MSHTML.HTMLDocument”)
后,我收到另一个错误。请参阅已编辑的帖子。抱歉,请尝试
CreateObject(“htmlfile”)
!是的,我已经得到了这个,但是接下来还有一些其他的问题
hDoc.body.innerHTML=xHttp.responseText
根据这一点
hDoc.body.innerHTML=xHttp.responseText
应该可以工作吗?这些行非常重要!!它们将网页的内容加载到HTML文档对象中。如果没有此选项,您的锚点集合将为空。使用
Set hDoc=CreateObject(“MSHTML.HTMLDocument”)
后,我收到另一个错误。请参阅已编辑的帖子。抱歉,请尝试
CreateObject(“htmlfile”)
!是的,我已经得到了这个,但是接下来还有一些其他的问题
hDoc.body.innerHTML=xHttp.responseText
根据这一点
hDoc.body.innerHTML=xHttp.responseText
应该可以工作吗?这些行非常重要!!它们将网页的内容加载到HTML文档对象中。如果没有此选项,您的锚集合将为空。请不要更改原始发布代码,因为它会更改问题和任何相关答案的上下文。原始问题是
Set hDoc=MSHTML.HTMLDocument
更改将使提供的答案无效。已回滚问题。请不要更改原始发布代码,因为它会更改问题和任何关联答案的上下文。原始问题是
Set hDoc=MSHTML.HTMLDocument
更改将使提供的答案无效。我已经把问题退回去了。
Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim xHttp