java从网页抓取数据(java脚本_doPostBack和onclick事件(一)(图))

优采云 发布时间: 2021-09-18 06:17

  java从网页抓取数据(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&gt;工具&gt;参考资料):

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线