Html VBA单击无唯一标识符的下一页按钮
下面粘贴的代码部分尝试循环浏览web搜索的每个页面。执行此操作的按钮由下面的html定义。循环只在第二个页面上运行,无论结果页面数如何,此时,我收到一个被拒绝的权限(错误70)Html VBA单击无唯一标识符的下一页按钮,html,excel,vba,web-scraping,Html,Excel,Vba,Web Scraping,下面粘贴的代码部分尝试循环浏览web搜索的每个页面。执行此操作的按钮由下面的html定义。循环只在第二个页面上运行,无论结果页面数如何,此时,我收到一个被拒绝的权限(错误70) Sub finrascrape() 模糊的物体 Dim pgcount、a、i、commaindex作为整数 尺寸B名称、cc、cnum、pg、nb为IHT规定 Dim blist、clist、pagelist、nextb、testtxt、testtxt2作为IHTMLElementCollection 设置ie=Cre
Sub finrascrape()
模糊的物体
Dim pgcount、a、i、commaindex作为整数
尺寸B名称、cc、cnum、pg、nb为IHT规定
Dim blist、clist、pagelist、nextb、testtxt、testtxt2作为IHTMLElementCollection
设置ie=CreateObject(“internetexplorer.application”)
brokersearch=InputBox(“输入代理名称或CRD”)
firmsearch=InputBox(“输入公司名称或CRD”)
geosearch=InputBox(“输入邮政编码(必须是有效的邮政编码,否则留空)”)
与ie
.导航“https://brokercheck.finra.org/"
.Visible=True
请稍等片刻。忙碌或。准备就绪状态4
多芬特
环
以
Set intags=ie.document.getElementsByTagName(“输入”)
每种进口gat
如果gat.placeholder=“Name或CRD#”,则
gat.Value=brokersearch
设置evt=ie.document.createEvent(“键盘事件”)
evt.initEvent“change”,真,假
gat.dispatchEvent evt
ElseIf gat.placeholder=“公司名称或CRD(可选)”然后
gat.Value=firmsearch
设置evt=ie.document.createEvent(“键盘事件”)
evt.initEvent“change”,真,假
gat.dispatchEvent evt
ElseIf gat.placeholder=“城市、州或邮政编码(可选)”然后
gat.Value=geosearch
设置evt=ie.document.createEvent(“键盘事件”)
evt.initEvent“change”,真,假
gat.dispatchEvent evt
其他的
如果结束
下一关
ie.document.getElementsByClassName(“md提升md主md-hue-2 md按钮md墨水波纹”)。项。单击
在忙或准备状态4时执行
多芬特
环
Set pagelist=ie.document.getElementsByClassName(“粗体深蓝色绑定”)
对于页面列表中的每个页面
如果pg.className=“bold font深蓝ng绑定”,则
a=pg.innerText
退出
调试。打印一个
如果结束
下一页
pgcount=工作表功能汇总(a/12,0)
调试。打印pgcount
表格(“结果”)。选择
范围(“A1”).Value=“经纪人名称”
范围(“B1”).Value=“经纪人CRD”
范围(“C1”).Value=“邮寄城市”
范围(“D1”).Value=“邮寄状态”
范围(“E1”).Value=“邮寄地址”
带范围(单元格(1,1),单元格(1,单元格(1,Columns.Count).End(xlToLeft.Column))
.Font.Bold=True
.HorizontalAlignment=xlCenter
以
对于i=1到pgcount
错误时转到报告完成
Set blist=ie.document.getElementsByClassName(“较小的ng绑定flex”)
对于blist中的每个bname
表格(“结果”)。选择
工作表(“结果”).Range(“A”和Range(“A”和Rows.Count).End(xlUp).Row+1).Value=bname.innerText
下一个bname
Set clist=ie.document.getElementsByClassName(“较小”)
对于clist中的每个cnum
表格(“流程”)。选择
如果cnum.className=“更小”,则
工作表(“流程”).Range(“A”和Range(“A”和Rows.Count).End(xlUp).Row+1).Value=cnum.innerText
如果结束
下一个cnum
表格(“流程”)。选择
对于a=1到工作表(“处理”).Range(“a”和Rows.Count).End(xlUp).Row
如果左(板材(“加工”).Range(“A”&A).Value,4)=“CRD#”,则
表格(“结果”)。选择
工作表(“结果”).范围(“B”和范围(“B”和行数”).结束(xlUp).行+1.值=右(工作表(“流程”).范围(“A”)和A.值,Len(工作表(“流程”).范围(“A”)-7)
如果InStr(图纸(“工艺”)范围(“A”和A+1).值“,”)=0,则
工作表(“流程”)。范围(“A”&A+1)。Value=“不可用,NA XXXXX”
如果结束
ElseIf InStr(表(“流程”)。范围(“A”和“A”)。值“,”)>0
commaindex=InStr(图纸(“流程”).范围(“A”和A).值“,”)
表格(“结果”)。选择
工作表(“结果”)。范围(“C”和工作表(“结果”)。范围(“C”和行数)。结束(xlUp)。行数+1)。值=左(工作表(“流程”)。范围(“A”)。值,commaindex-1)
工作表(“结果”).范围(“D”和工作表(“结果”).范围(“D”和行数).结束(xlUp).行数+1).值=左(右)(工作表(“流程”).范围(“A”和A).值_
Len(图纸(“工艺”).范围(“A”和“A”)-commaindex-1),2)
工作表(“结果”).范围(“E”和工作表(“结果”).范围(“E”和行数).结束(xlUp).行数+1).值=左(右)(工作表(“流程”).范围(“A”和A).值_
Len(图纸(“工艺”).范围(“A”和“A”)-commaindex-4),5)
其他的
如果结束
表格(“流程”)。选择
下一个
表格(“流程”)。单元格。清除
Set testtxt=ie.document.getElementsByTagName(“a”)
对于testtxt中的每个txt
如果txt.className=“ng binding”,则
点击
在忙或准备状态4时执行
多芬特
环
设置testtxt2=ie.document.getElementsByTagName(“a”)
对于a=pgcount到2步骤-1
对于testtxt2中的每个txt2
如果txt2.className=“ng binding”和txt2.innerText=a&“of”&pgcount&“pages”,则
'Debug.Print a
转到“”的“”结尾
如果结束
下一个txt2
下一个
如果结束
下一个文本
以下各项的结束日期:
a=pgcount
在忙或准备状态4时执行
多芬特
环
接下来我
报告完成:
MsgBox“FINRA Web刮片完成。请审阅。”
端接头
HTML:
搜索登录页的URL为。任何帮助都将不胜感激。我开发了一个循环,如下所示,它成功地导航“a”标记的元素,根据前面元素的内部文本识别正确的按钮,并在每个页面中循环
Set testtxt = ie.document.getElementsByTagName("a")
If i < pgcount Then
For d = 1 To testtxt.Length
If testtxt.Item(d).innerText = i & " of " & pgcount & " pages" Then
testtxt.Item(d + 1).Click
Do While ie.Busy Or ie.readyState <> 4
DoEvents
Loop
Exit For
End If
Next d
End If
Set testtxt=ie.document.getElementsByTagName(“a”)
如果我不算的话
对于d=1到testtxt.Length
如果testtxt.Item(d).innerText=i&“of”&pgcount&“pages”,则
testtxt.Item(d+1)。单击
在忙或准备状态4时执行
多芬特
环
退出
如果结束
下一个d
如果结束
这就是您可以遍历所有27页并获取代理名称的方法
Sub Get_Content()
Dim ie As New InternetExplorer, html As HTMLDocument
Dim itm As Object, post As Object, posts As Object, elem As Object
With ie
.Visible = True
.navigate "https://brokercheck.finra.org/"
Do Until .readyState = READYSTATE_COMPLETE: Loop
Set html = .document
End With
Set evt = html.createEvent("keyboardevent")
evt.initEvent "change", True, False
For Each itm In html.getElementsByTagName("input")
If InStr(itm.placeholder, "Name or CRD#") > 0 Then
itm.Value = "Michael John"
Exit For
End If
Next itm
itm.dispatchEvent evt
For Each post In html.getElementsByTagName("input")
If InStr(post.placeholder, "Firm Name or CRD# (optional)") > 0 Then
post.Value = "Morgan Stanley"
Exit For
End If
Next post
post.dispatchEvent evt
html.getElementsByClassName("md-button")(0).Click
Do While ie.Busy Or ie.readyState <> 4: DoEvents: Loop
Do
For Each elem In html.getElementsByClassName("smaller ng-binding flex")
x = x + 1: Cells(x, 1) = elem.innerText
Next elem
html.getElementsByClassName("pagination-next")(0).getElementsByTagName("a")(0).Click
Do While ie.Busy Or ie.readyState <> 4: DoEvents: Loop
Loop Until InStr(html.body.innerHTML, " class=""pagination-last ng-scope disabled""") > 0
ie.Quit
End Sub
Sub Get_Content()
Dim ie作为新的InternetExplorer,html作为HTMLDocument
调暗itm作为对象、post作为对象、post作为对象、elem作为对象
与ie
.Visible=True
.导航“https://brokercheck.finra.org/"
直到.readyState=readyState\u完成:循环
设置html=.document
以
设置evt=html.createEvent(“keyboardevent”)
Set testtxt = ie.document.getElementsByTagName("a")
If i < pgcount Then
For d = 1 To testtxt.Length
If testtxt.Item(d).innerText = i & " of " & pgcount & " pages" Then
testtxt.Item(d + 1).Click
Do While ie.Busy Or ie.readyState <> 4
DoEvents
Loop
Exit For
End If
Next d
End If
Sub Get_Content()
Dim ie As New InternetExplorer, html As HTMLDocument
Dim itm As Object, post As Object, posts As Object, elem As Object
With ie
.Visible = True
.navigate "https://brokercheck.finra.org/"
Do Until .readyState = READYSTATE_COMPLETE: Loop
Set html = .document
End With
Set evt = html.createEvent("keyboardevent")
evt.initEvent "change", True, False
For Each itm In html.getElementsByTagName("input")
If InStr(itm.placeholder, "Name or CRD#") > 0 Then
itm.Value = "Michael John"
Exit For
End If
Next itm
itm.dispatchEvent evt
For Each post In html.getElementsByTagName("input")
If InStr(post.placeholder, "Firm Name or CRD# (optional)") > 0 Then
post.Value = "Morgan Stanley"
Exit For
End If
Next post
post.dispatchEvent evt
html.getElementsByClassName("md-button")(0).Click
Do While ie.Busy Or ie.readyState <> 4: DoEvents: Loop
Do
For Each elem In html.getElementsByClassName("smaller ng-binding flex")
x = x + 1: Cells(x, 1) = elem.innerText
Next elem
html.getElementsByClassName("pagination-next")(0).getElementsByTagName("a")(0).Click
Do While ie.Busy Or ie.readyState <> 4: DoEvents: Loop
Loop Until InStr(html.body.innerHTML, " class=""pagination-last ng-scope disabled""") > 0
ie.Quit
End Sub