java从网页抓取数据(java脚本_doPostBack和onclick事件(一)(图))
优采云 发布时间: 2021-09-18 06:17java从网页抓取数据(java脚本_doPostBack和onclick事件(一)(图))
__DoPostBack和onclick事件:
当您检查与选择主contentdiv列(例如longterme)相关联的HTML时,您可以看到与每个bar item_uudopostback函数的onclick事件相关联的java脚本
请注意所讨论的HTML:
请参阅上面的链接:
该函数采用以下两个参数:EventTarget-它收录导致回发的控件的ID。Eventargument-收录与控件关联的任何其他数据。在任何页面中,都会自动声明两个隐藏字段:_u事件目标和_u事件参数。会检查何时将页面发回服务器_uu事件目标和_uu事件参数值,以便确定哪些控件导致页面发回以及必须处理哪些事件
tldr
在ASP的“旧”时代,通常必须有一个表单来捕获用户输入,然后创建其他页面来接受这些输入(get或post)、验证、执行操作等。使用,您可以在服务器上声明接受上述参数的控件,并在检查值后发回同一页面
第一个参数告诉您哪个控件被触发,第二个参数提供附加信息,在这种情况下,它决定返回哪个选项卡信息
从上面可以看出,tabaction是一个控件,它后面的数字对应于感兴趣的标记。例如,2是长期的(0-指数)
在VBA中,我们可以通过多种方式执行此JS函数,但我将使用:
.document.parentWindow.execScript "__doPostBack('EVENTTARGET', 'EVENTARGUMENT')"
这就变成了:
.document.parentWindow.execScript "__doPostBack('TabAction', '2')"
我将其重写为接受eventargument作为常量选项uchoose,因此您可以通过更改顶部的值来检索不同的选项卡
函数执行后,还有一点时间刷新页面,然后通过ID捕获表:
Set hTable = .document.getElementById("ctl00_ctl00_MainContent_Layout_1MainContent_gridResult")
然后,表格沿行和列循环(列是沿每行长度的表格单元格)
第页的示例:
代码输出示例:
完整代码:
Option Explicit
Public Sub GetTable()
Dim IE As New InternetExplorer
Const OPTION_CHOSEN As Long = 2 '0 Aperçu; 1 Court terme; 2 Long terme; 3 Portefeuille; 4 Frais & Détails
Application.ScreenUpdating = True
With IE
.Visible = True
.navigate "http://www.morningstar.fr/fr/fundquickrank/default.aspx"
While .readyState < 4: DoEvents: Wend
.document.parentWindow.execScript "__doPostBack('TabAction', ' " & OPTION_CHOSEN & "')"
Do While .Busy = True Or .readyState 4: DoEvents: Loop
Dim hTable As HTMLTable, tRow As HTMLTableRow, tCell As HTMLTableCell
Set hTable = .document.getElementById("ctl00_ctl00_MainContent_Layout_1MainContent_gridResult")
Dim c As Long, r As Long
With ActiveSheet
For Each tRow In hTable.Rows
For Each tCell In tRow.Cells
c = c + 1: .Cells(r + 1, c) = tCell.innerText
Next tCell
c = 0: r = r + 1
Next tRow
.Columns("A:A").Delete
.UsedRange.Columns.AutoFit
End With
.Quit
End With
Application.ScreenUpdating = True
End Sub
参考资料(VBE>;工具>;参考资料):