ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-30 10:42 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 蓝天630902 于 2012-9-14 06:30 编辑

  1. Sub 关闭讨厌的家伙()
  2.   With CreateObject("InternetExplorer.Application") '创建空IE
  3.       .Visible = True 'IE可见
  4.       .Navigate "http://de.yusuan.com/index.html" '导航到http://de.yusuan.com/index.html
  5.         Do Until .ReadyState = 4 '等待ie加载完毕
  6.             DoEvents
  7.         Loop
  8.         t1 = Timer
  9.         Do Until Timer > t1 + 8 '留言系统比较讨厌,没办法,再等待5秒钟
  10.             DoEvents
  11.         Loop
  12.         .Document.All.tags("div")(4).Click '关闭“右边”的讨厌的家伙
  13.         .Document.All.tags("div")(27).Click '关闭“中间”的讨厌的家伙
  14.         .Document.All.tags("div")(37).Click '关闭“左边”的讨厌的家伙
  15.    End With
  16. End Sub
复制代码


第二辑、网页:篡改、保留和屏蔽某些内容 :http://club.excelhome.net/thread-917808-1-1.html

查找标签.rar  ,在12楼。
http://club.excelhome.net/forum.php?mod=attachment&aid=MTE3MDMyMXwwNmE3ODM2NnwxMzM4ODA0MDQ5fDE2NjY1MTV8ODc0NjA4

评分

8

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-30 10:43 | 显示全部楼层
神奇啊!
“可是,那个21、81什么的,是怎么来的?”
“我也不知道。”我告诉你。
我是用傻办法(主要是,本人比较傻),要是你有好办法,请你尽早告诉我,否则的话,我只好自认“别无他法”。
先找那个“81”试试看:

Sub 先找那个81试试看()
  With CreateObject("InternetExplorer.Application") '创建空IE
      .Visible = True 'IE可见
      .Navigate "http://de.yusuan.com/index.html" '导航到http://de.yusuan.com/index.html
        Do Until .ReadyState = 4 '等待ie加载完毕
            DoEvents
        Loop
        t1 = Timer
        Do Until Timer > t1 + 5 '留言系统比较讨厌,没办法,再等待5秒钟
            DoEvents
        Loop
        .Document.All.tags("div")(4).Click '关闭“右边”的讨厌的家伙
        .Document.All.tags("div")(27).Click '关闭“中间”的讨厌的家伙
        .Document.All.tags("div")(37).Click '关闭“左边”的讨厌的家伙
       Set r = .Document.All.tags("div") '创建div对象,并赋给r
       For i = 0 To r.Length - 1 'r的长度
       If Trim(r(i).innerText) = "行业定额" Then '查找行业定额的i
       Debug.Print i '在立即窗口显示i
       End If
       Next i
   End With
End Sub

看看立即窗口,应该是81。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-30 10:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 蓝天630902 于 2012-9-13 19:03 编辑

一个一个地找,岂不小看了vba?我们有更一般的办法:

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
            DoEvents
        Loop
       Set r = .Document.All.tags("div")
       For i = 0 To r.Length - 1  'div标签的个数
       Cells(i + 1, 1) = i
       Cells(i + 1, 2) = r(i).innerText '把第i个div标签的内容写入第i+1行,2列
       Next i
   End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-30 10:45 | 显示全部楼层
本帖最后由 蓝天630902 于 2012-6-8 03:18 编辑

要是,我想点击右边“地区分类”中的那个“天津”,上面找不到他的“i”,只好另想办法:

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
            DoEvents
        Loop
       Set r = .Document.All.tags("A")
       For i = 0 To r.Length - 1
       Cells(i + 1, 1) = i
       Cells(i + 1, 2) = r(i).innerText
       Next i
   End With
End Sub

天津是696
所以,下面就可以点击天津:


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
            DoEvents
        Loop
        .Document.All.tags("a")(696).Click '
   End With
End 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

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-30 10:46 | 显示全部楼层
有点晕 “晕是正常的。你不晕,那是因为你是天才。”,前面是“div“,现在又来一个什么“a”,到底什么时候用“a”,什么时候用“div”?我跟你说:“我也不知道!”。
要弄清楚这个问题,还是先下载一个“武器”: notepad++.exe
然后,用notepad++.exe 来看http://de.yusuan.com/index.html的源码“源文件”。
可以看到:

        <tr>
                <td bgcolor='#FFFFFF' width='75'><A href='page_class.asp?area=100006'>天津</A></td>
                <td bgcolor='#FFFFFF' width='75'><A href='page_class.asp?area=100007'>宁夏</A></td>
                <td bgcolor='#FFFFFF' width='75'><A href='page_class.asp?area=100008'>安徽</A></td>
        </tr>
解释一下:
tr,表示行,表格(table)的行,
td,表示列,表格(table)的列,
Bgcolor,表示表格(table)的背景颜色,
#FFFFFF,表示白色,
Width,表示表格(table)的列宽,这里宽度为75,
a,表示锚,就是把“href”网址、和表格的内容锚入表格中,
href,表示地址,
“天津”,表示td的内容。

所以,找天津,就用“a”

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-30 10:47 | 显示全部楼层
那前面为什么用“div”?
还是看看源码:


          <div class="div_index_bodyL1">
            <div class="div_index_bodyL1_title_focus"><span id="focus_names">地区定额</span></div>
      <div id="de_list" onmouseover="chk_focus('de_list');" class="div_index_bodyL1_title" style="background: url(body_2.png) no-repeat;">地区定额</div>
      <div id="hy_list" onmouseover="chk_focus('hy_list');" class="div_index_bodyL1_title">行业定额</div>
      <div id="cl_list" onmouseover="chk_focus('cl_list');" class="div_index_bodyL1_title">材料查询</div>
      <div class="clear"></div>
</div>
看到吧,“行业定额”、“材料查询”是用“div”来分区的,所以用“div”了。
关于“div”、“a”、“td”什么的,可以去http://www.w3school.com.cn/tags/index.asp
看看,不再解释。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-30 14:08 | 显示全部楼层
http://www.ddx.name/,在源代码中看不到“股票查询”
怎么办?我们知道,输入框可以是用input标签,
所以,找一找input标签:

Sub 查找股票查询输入框()
  With CreateObject("InternetExplorer.Application")
      .Visible = True
      .Navigate "http://www.ddx.name/"
        Do Until .ReadyState = 4
            DoEvents
        Loop
       Set r = .Document.All.tags("input")
       For i = 0 To r.Length - 1
       Cells(i + 1, 1) = i
       Cells(i + 1, 2) = r(i).Name
       Next i
   End With
End Sub

5        S_stockCode
6       

所以,可以用下面的代码试一试:


Sub 实时DDX查询()
    On Error Resume Next
    With CreateObject("internetexplorer.application")
        .Visible = True
        .Navigate "http://www.ddx.name/"
        Do Until .ReadyState = 4
            DoEvents
        Loop
        .Document.All.tags("INPUT")(5).Value = "000825"
        .Document.All.tags("INPUT")(6).Click
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2012-5-30 20:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好贴,学到很多知识。收藏了,继续关注。

TA的精华主题

TA的得分主题

发表于 2012-5-30 20:42 | 显示全部楼层
蓝天630902 发表于 2012-5-30 10:43
神奇啊!
“可是,那个21、81什么的,是怎么来的?”
“我也不知道。”我告诉你。

楼主的方法不用借助其他工具,很见功力。如果借助工具,用按键精灵9很容易得到。截个图传上来。

2012-05-30_20-41-52.png

TA的精华主题

TA的得分主题

发表于 2012-5-31 06:48 | 显示全部楼层
蓝天630902 发表于 2012-5-30 10:46
有点晕 “晕是正常的。你不晕,那是因为你是天才。”,前面是“div“,现在又来一个什么“a”,到底什么 ...

<td bgcolor='#FFFFFF' width='75'><A href='page_class.asp?area=100006'>天津</A></td>
大侠,href能是电脑上的网页吗,怎么表示呀...
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 12:15 , Processed in 0.041718 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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