ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用VBA抓取网页多层下拉菜单的数据

如何用VBA抓取网页多层下拉菜单的数据

作者:绿色风 分类: 时间:2022-08-17 浏览:131
楼主
xmyjk
Q:如何获取http://www.51auto.com/sell/,如图所示的“品牌 ----- 车系-----出厂年份-----车型”的下拉菜单的菜单数据。

 


A:分析过程:
品牌数据是页面加载完毕就有了,车系的数据要选择完哪个品牌后再从服务器取得的,出厂年份要在车系选择后才从服务器取得,车型要在年份选择后从服务器取得。
因此要层层选定,并触发select控件的onchange事件,取得数据后,再取得下一级,最后取数。

代码如下,运行后,程序会暂停,然后点掉两个提示框,然后继续运行,即可继续输出。
  1. Option Explicit
  2. Sub a()
  3.     Dim ie1 As Object, dmt As Object, r As Object, i As Long, k As Long, j As Long, l As Long, t

  4.   '  Load UserForm1
  5.    ' UserForm1.Show 0

  6.     [a1].CurrentRegion.Clear '清空工作表
  7.     Cells.NumberFormat = "@"
  8.     Set ie1 = UserForm1.WebBrowser1

  9.     With ie1
  10.         .Navigate "http://www.51auto.com/sell/"    '激活网址
  11.         Do Until .ReadyState = 4 And .Busy = False '等待页面加载完毕
  12.             DoEvents
  13.         Loop
  14.         Set dmt = .Document '取得文档
  15.         Stop
  16.         For i = 1 To dmt.All("**MakeCode").Length - 1 '获取数据表
  17.             If dmt.All("**MakeCode")(i).Value <> "" Then '剔除无关项目
  18.                 dmt.All("**MakeCode").Value = dmt.All("**MakeCode")(i).innertext '按顺序设置品牌项目
  19.                 dmt.All("**MakeCode").fireevent ("onchange") '触发事件获取下级菜单
  20.                 t = Timer
  21.                 Do Until .ReadyState = 4 And .Busy = False And Timer > t + 1 '待加载完毕
  22.                     DoEvents
  23.                 Loop
  24.                 Set dmt = .Document
  25.                 For j = 1 To dmt.All("**Family").Length - 1 '同上,开始设置车系并取得下级菜单
  26.                     If dmt.All("**Family")(j).Value <> "" Then
  27.                         dmt.All("**Family").Value = dmt.All("**Family")(j).Value
  28.                         dmt.All("**Family").fireevent ("onchange")
  29.                         t = Timer
  30.                         Do Until .ReadyState = 4 And .Busy = False And Timer > t + 1
  31.                             DoEvents
  32.                         Loop
  33.                         Set dmt = .Document
  34.                         For k = 1 To dmt.All("VehicleYear").Length - 1 '同上,设置年份,取得下级菜单
  35.                             If dmt.All("VehicleYear")(k).Value <> "" Then
  36.                                 dmt.All("VehicleYear").Value = dmt.All("VehicleYear")(k).Value
  37.                                 dmt.All("VehicleYear").fireevent ("onchange")
  38.                                 t = Timer
  39.                                 Do Until .ReadyState = 4 And .Busy = False And Timer > t + 1
  40.                                     DoEvents
  41.                                 Loop
  42.                                 Set dmt = .Document
  43.                                 For l = 1 To dmt.All("VehicleKey").Length - 1 '开始从车型的菜单中提取数据
  44.                                     With [a65536].End(3).Offset(1)
  45.                                         .Offset(, 0) = dmt.All("**MakeCode").Value
  46.                                         .Offset(, 1) = dmt.All("**Family").Value
  47.                                         .Offset(, 2) = dmt.All("VehicleYear").Value
  48.                                         .Offset(, 3) = dmt.All("VehicleKey")(l).innertext
  49.                                     End With
  50.                                 Next
  51.                             End If
  52.                         Next
  53.                     End If
  54.                 Next
  55.             End If
  56.         Next
  57.     End With
  58.     Set ie1 = Nothing
  59.     Set dmt = Nothing

  60. End Sub

111222.zip
2楼
亡者天下
弦月的VBA越来越强悍了
3楼
wudixin96
相当看不懂
4楼
lrlxxqxa
结构很棒:图解+分析过程+代码解析注释+附件
今后再把附件名字编辑一下就更好了
5楼
hl_irnt
收藏先
6楼
CJH-龙年快乐
先收藏,回头再慢慢看!
7楼
spell-chang
太有用了
8楼
sharkzhou
我也看不洞。先收下
9楼
stevefigo
了解,学习!
10楼
L_924
楼主,代码运行有错,不懂[attachimg]74930QQ截图20121012085142.jpg
 
11楼
水星钓鱼
牛B,学习
12楼
rongjun
学习了!
13楼
老糊涂
下载学习

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap