Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击两个按钮后,刮取数据_Javascript_Html_Vba_Click_Href - Fatal编程技术网

Javascript 单击两个按钮后,刮取数据

Javascript 单击两个按钮后,刮取数据,javascript,html,vba,click,href,Javascript,Html,Vba,Click,Href,我正试图从这个网页中获取每个型号的href:。 显示href数据的html只有在依次单击两个按钮(一个在右上角,一个在左上角,称为“模型”)后才能看到 Sub get_info() 模糊的物体 Dim地址,str_chk作为字符串 将my_数据作为对象进行暗显 尺寸oHTML\U元件作为IHTML元件 我想我会坚持多久 地址=”https://www.aprilia.com/en_EN/index" 设置ie=CreateObject(“InternetExplorer.Application”

我正试图从这个网页中获取每个型号的href:。
显示href数据的html只有在依次单击两个按钮(一个在右上角,一个在左上角,称为“模型”)后才能看到

Sub get_info()
模糊的物体
Dim地址,str_chk作为字符串
将my_数据作为对象进行暗显
尺寸oHTML\U元件作为IHTML元件
我想我会坚持多久
地址=”https://www.aprilia.com/en_EN/index"
设置ie=CreateObject(“InternetExplorer.Application”)
例如,导航地址为“上述地址”
可见=假
在忙或准备状态4时执行
多芬特
环
对于ie.document.getElementsByName(“按钮”)中的每个oHTML_元素
如果oHTML_Element.className=“标题菜单-服务-导航按钮-图标”,则
oHTML_元素。单击
如果结束
下一个
申请。现在等待+#12:00:05 AM#
对于ie.document.getElementsByName(“模型”)中的每个oHTML_元素
oHTML_元素。单击
下一个
申请。现在等待+#12:00:05 AM#
'==>
设置my_data=html.getElementsByClassName(“卡产品-卡产品-系列”)
对于my_数据中的每个元素
对于i=0到elem.getElementsByTagName(“a”).Length-1
str_chk=elem.getElementsByTagName(“a”)(i).href
ws.Cells(9+j,7).Value=str_-chk
j=j+1
接下来我
下一个要素
即退出
设置ie=无
端接头
我得到

错误“424”-需要对象

我在这里设置
我的_数据

我想这意味着我不能点击这两个按钮,因此html代码不可用

*****************修订守则:

Sub get_info22()
作为字符串的Dim地址
Dim ie、ELE、节点作为对象
我想我会坚持多久
日期
常量最大等待时间=10秒
地址=”https://www.aprilia.com/en_EN/index"
设置ie=CreateObject(“InternetExplorer.Application”)
例如,导航地址为“上述地址”
可见=假
在忙或准备状态4时执行
多芬特
环
“*************单击第一个按钮
t=计时器
做
出错时继续下一步
Set ELE=ie.document.querySelector(“.header\u menu-services\uu nav”)
如果定时器-t>最大等待时间,则退出Do
循环,而ELE什么都不是
如果不是,那么ELE什么都不是
ELE.点击
如果结束
当ie忙或ie readyState 4:DoEvents:Wend时
“*************点击第二个按钮
做
出错时继续下一步
设置ELE=ie.document.querySelector(“li>按钮”)
如果定时器-t>最大等待时间,则退出Do
循环,而ELE什么都不是
如果不是,那么ELE什么都不是
ELE.点击
如果结束
当ie忙或ie readyState 4:DoEvents:Wend时
'*************获取每个模型的href
Set nodes=ie.document.queryselectoral(“.card product--family”)
ReDim hrefs(nodes.Length-1)
对于i=0的节点,长度为-1
hrefs(i)=节点。项(i)。href
ActiveSheet.Cells(9+i,7).Value=hrefs(i)
下一个

首先尝试使用更精确的选择器。对于第一个按钮,请使用:

ie.document.querySelector(".header__menu-services__nav").click
以元素的一个类为目标的。然后停顿一下

While ie.Busy Or ie.ReadyState<>4:DoEvents:Wend
那你需要再等一次

最后,您可以使用目标元素中的单个类和链接,提取
href
属性并存储在数组中(例如)


编辑:

页面似乎使用ajax来检索列表,这使得检索更加容易。我把它展示给不同的版本。第一个地方,我抓取的只是那些链接,你描述后,两个按钮点击;第二,我还获取了模型子类型链接

在这两种情况下,我都模拟了页面获取信息的请求。首先,我使用json解析器解析返回的json,并拉出模型链接。对于第二个,我将regex输出所有href信息,即所有子模型


Json库:

我使用jsonconverter.bas。从名为JsonConverter的标准模块下载原始代码并将其添加到该模块中。然后需要转到VBE>工具>引用>添加对Microsoft脚本运行时的引用。从复制的代码中删除顶部属性行

(一)



  • 正则表达式解释:


    首先尝试使用更精确的选择器。对于第一个按钮,请使用:

    ie.document.querySelector(".header__menu-services__nav").click
    
    以元素的一个类为目标的。然后停顿一下

    While ie.Busy Or ie.ReadyState<>4:DoEvents:Wend
    
    那你需要再等一次

    最后,您可以使用目标元素中的单个类和链接,提取
    href
    属性并存储在数组中(例如)


    编辑:

    页面似乎使用ajax来检索列表,这使得检索更加容易。我把它展示给不同的版本。第一个地方,我抓取的只是那些链接,你描述后,两个按钮点击;第二,我还获取了模型子类型链接

    在这两种情况下,我都模拟了页面获取信息的请求。首先,我使用json解析器解析返回的json,并拉出模型链接。对于第二个,我将regex输出所有href信息,即所有子模型


    Json库:

    我使用jsonconverter.bas。从名为JsonConverter的标准模块下载原始代码并将其添加到该模块中。然后需要转到VBE>工具>引用>添加对Microsoft脚本运行时的引用。从复制的代码中删除顶部属性行

    (一)



  • 正则表达式解释:


    您没有声明或填充名为
    html
    的变量,您的意思是
    ie.document.getElementsByClassName
    ?谢谢@TimWilliams。现在我再也看不到错误'424'。不幸的是,我仍然无法检索任何数据。您尚未声明或填充名为
    html
    的变量,您的意思是
    ie.document.getElementsByClassName
    ?谢谢@TimWilliams。现在我再也看不到错误'424'。不幸的是,我仍然无法检索任何数据。Hello@Harr,我试图按照您的建议修改代码。我没有收到任何错误,但无法检索任何数据。您是否在“本地人”窗口中检查了HREF?您的意思是,在原始网页上?顺便说一句,我已经发布了我写的新代码,谢谢
    Option Explicit
    
    Public Sub ScrapeModelLinks1()
        
        Dim data As Object, links() As Variant, s As String
        
        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", "https://www.aprilia.com/en_EN/aprilia/en/index?ajax=true", False
            .setRequestHeader "User-Agent", "Mozilla/5.0"
            .send
            s = .responseText
        End With
    
        Set data = JsonConverter.ParseJson(s)("pageData")("main")("component-06")("items")
        
        ReDim links(data.Count)
        Dim item As Long, base As String
        
        base = "https://www.aprilia.com"
    
        For item = 1 To data.Count
            links(item) = base & data(item)("href")
        Next
        
        Stop
        
    End Sub
    
    Public Sub ScrapeModelLinks2()
        'grab all href which will include model subtypes
        Dim s As String
        
        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", "https://www.aprilia.com/en_EN/aprilia/en/index?ajax=true", False
            .setRequestHeader "User-Agent", "Mozilla/5.0"
            .send
            s = .responseText
        End With
        
        Dim re As Object, matches As Object, links() As Variant
        
        Set re = CreateObject("VBScript.RegExp")
    
        re.Pattern = """href"":""(.*?)"""
        re.Global = True
        Set matches = re.Execute(s)
        
        ReDim links(matches.Count - 1)
        Dim item As Long, base As String
        
        base = "https://www.aprilia.com"
     
        For item = 0 To matches.Count - 1
            links(item) = base & matches(item).submatches(0)
        Next
        
        Stop
        
    End Sub