ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 蓝天630902

[分享] 第一辑、网页:点击标签,翻页

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-24 11:02 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
yyw9230 发表于 2012-9-24 10:41
蓝天老师:
问题已经解决,虽然用了Do Until ie.readyState = READYSTATE_COMPLETE
        DoEvents

你看看,你的数据在什么"标签"里面,并且是“分布”在什么父标签里面,
现在就可以这样子做:
Set r = .document.All.tags("父标签")(n).All.tags("标签")
for i=0 to r.length -1
……………………
next i

TA的精华主题

TA的得分主题

发表于 2012-9-24 11:39 | 显示全部楼层
蓝天630902 发表于 2012-9-24 11:02
你看看,你的数据在什么"标签"里面,并且是“分布”在什么父标签里面,
现在就可以这样子做:
Set r =  ...

在我没有滚动滚动条之前,我的数据就只有26行,当滚动之后,html里面的元素就更新了,会变得和新的一样,解释的好混乱,举个例子:
我总共要取A,B,C,D四个元素,由于页面大小的限制,只能看见A,B两个,而Html的元素也只有A和B,看不到C,D,但是我下翻一页后,页面里面变成了C和D, Html的元素也跟着变成了C和D,看不到A,B

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-24 12:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yyw9230 发表于 2012-9-24 11:39
在我没有滚动滚动条之前,我的数据就只有26行,当滚动之后,html里面的元素就更新了,会变得和新的一样, ...

换一下地址,运行下面这段代码看看:

Sub 读取标签属性及内容()
    [a1,I1] = Split("i,className,href,ID,innerText,tabIndex,tagName,Target,Title", ",")
    On Error Resume Next
    With CreateObject("internetexplorer.application")
        .Visible = True
        .Navigate "http://club.excelhome.net/forum.php?mod=viewthread&tid=874608&page=6#pid6333111"
        Do Until .ReadyState = 4
            DoEvents
        Loop
        Set r = .document.All
        For i = 0 To r.Length - 1
            Cells(i + 2, 1) = i
            Cells(i + 2, 2) = r(i).className          '对象的类。
            Cells(i + 2, 3) = r(i).href               '目标 URL 或锚点。
            Cells(i + 2, 4) = r(i).ID                 '标识对象的字符串。
            Cells(i + 2, 5) = r(i).innerText          '对象标签内的文本。
            Cells(i + 2, 6) = r(i).tabIndex           '对象的 Tab 顺序的索引。
            Cells(i + 2, 7) = r(i).tagName            '对象的标签名称。
            Cells(i + 2, 8) = r(i).Target             '目标内容要显示于哪个窗口或框架。
            Cells(i + 2, 9) = r(i).Title              '对象的咨询信息(工具提示)。
        Next i
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2012-9-24 13:26 | 显示全部楼层
蓝天630902 发表于 2012-9-24 12:55
换一下地址,运行下面这段代码看看:

Sub 读取标签属性及内容()

运行了一下,只到26行,抓到的应该是全部,我看了源文件,超出26行的数据是找不到的,当翻页或者滚动之后,才能在源文件中看到下面的

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-24 13:38 | 显示全部楼层
yyw9230 发表于 2012-9-24 13:26
运行了一下,只到26行,抓到的应该是全部,我看了源文件,超出26行的数据是找不到的,当翻页或者滚动之后 ...



那就翻页吧

TA的精华主题

TA的得分主题

发表于 2012-9-25 11:12 | 显示全部楼层
蓝天630902 发表于 2012-9-24 13:38
那就翻页吧

o(∩_∩)o 哈哈,谢了,一直在想滚动,没去考虑翻页,昨天研究了下,通过翻页解决了

TA的精华主题

TA的得分主题

发表于 2012-10-11 20:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-10-16 22:53 | 显示全部楼层
本帖最后由 cumulonimbus 于 2012-10-16 22:54 编辑
蓝天630902 发表于 2012-5-30 10:45
要是,我想点击右边“地区分类”中的那个“天津”,上面找不到他的“i”,只好另想办法:

Sub 找那个天 ...


Sub 点击那津()
With CreateObject("InternetExplorer.Application")
    .Visible = True
    .Navigate "http://de.yusuan.com/index.html"
    Do Until .ReadyState = 4
        DoEvents
    Loop
    While .ReadyState <> 4 Or .Busy
        DoEvents
    Wend
    Set r = .Document.All.tags("td")
    For i = 0 To r.Length - 1
        If r(i).All.tags("a")(0).innerText = "天津" Then        '保证是右边的“天津”,而不是上面的“天津”
            r(i).All.tags("a")(0).Click
        Exit For
        End If
    Next i
End With
End Sub

运行到红色部份运行不下去了,提示对像变量或WITH块变量未设置,奇怪,好像以前是可以运行的。是网站改版了吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-10-17 09:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 蓝天630902 于 2012-10-17 09:33 编辑

Sub 点击那天津()
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate "http://de.yusuan.com/index.html"
        Do Until .ReadyState = 4
            DoEvents
        Loop
        t1 = Timer
        Do Until Timer > t1 + 5    '这里等5秒钟,主要是右下角的东东出现
            DoEvents
        Loop
        Set r = .Document.All.tags("table")
        For i = 0 To r.Length - 1
            If r(i).classname = "tbs_list" Then
                Set r1 = r(i).All.tags("td")
                For j = 0 To r.Length - 1
                    If r1(j).All.tags("a")(0).innerText = "天津" Then    '保证是右边的“天津”,而不是上面的“天津”
                        r1(j).All.tags("a")(0).Click
                        GoTo 1
                    End If
                Next j
            End If
        Next i
1:
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2012-10-29 22:02 | 显示全部楼层
版主,你真是太厉害了。您是我的偶像,希望您能帮小弟看一下我的求助贴/
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-19 17:53 , Processed in 0.040911 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表