ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 第二辑、网页:篡改、保留和屏蔽某些内容

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-14 08:06 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 蓝天630902 于 2012-9-14 08:13 编辑

我们在 第一辑、网页:点击标签,翻页 http://club.excelhome.net/thread-874608-1-1.html
里面讲过如何关闭那些讨厌的东西,但效果不是很好,主要是随着时间的流逝,标签号改变了。
有没有更好的办法解决这样的问题呢?答案是肯定的(不过不要高兴得太早了,哪一天,它连标签名都给改了,就没辙了)
看看下面的方法与第一辑、网页:点击标签,翻页 http://club.excelhome.net/thread-874608-1-1.html的有什么不同:

  1. Sub 关闭讨厌的家伙()
  2.     On Error Resume Next
  3.     With CreateObject("internetexplorer.application")
  4.         .Visible = True
  5.         .Navigate "http://de.yusuan.com/page_content.asp?content=98"
  6.         Do Until .ReadyState = 4
  7.             DoEvents
  8.         Loop
  9.         t1 = Timer
  10.         Do Until Timer > t1 + 5    '这里等5秒,主要是让右侧的讨厌的家伙全部出现,然后关闭它
  11.             DoEvents
  12.         Loop
  13.         For i = 0 To .document.All.tags("div").Length
  14.             If .document.All.tags("div")(i).ID = "tq_invit_close" Then .document.All.tags("div")(i).Click '关闭“网站管理员请求和您通话(本系统由TQ提供)”
  15.             If .document.All.tags("div")(i).ID = "tq_float_close" Then .document.All.tags("div")(i).Click '关闭“筑业在线客服”
  16.             If .document.All.tags("div")(i).ID = "TQMiniMessWrap" Then .document.All.tags("div")(i).innerHTML = "" '关闭“筑业软件留言系统”
  17.         Next i
  18.     End With
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-14 08:48 | 显示全部楼层
其实呢,上面的还可以做得更干净些:

  1. Sub 关闭讨厌的家伙()
  2.     On Error Resume Next
  3.     With CreateObject("internetexplorer.application")
  4.         .Visible = True
  5.         .Navigate "http://de.yusuan.com/page_content.asp?content=98"
  6.         Do Until .ReadyState = 4
  7.             DoEvents
  8.         Loop
  9.         t1 = Timer
  10.         Do Until Timer > t1 + 5    '这里等5秒,主要是让右侧的讨厌的家伙全部出现,然后关闭它
  11.             DoEvents
  12.         Loop
  13.         For i = 0 To .document.All.tags("div").Length
  14.             If .document.All.tags("div")(i).ID = "tq_invit_close" Then .document.All.tags("div")(i).Click    '关闭“网站管理员请求和您通话(本系统由TQ提供)”,通过id查找
  15.             If .document.All.tags("div")(i).ID = "tq_float_close" Then .document.All.tags("div")(i).Click    '关闭“筑业在线客服”
  16.             If .document.All.tags("div")(i).ID = "TQMiniMessWrap" Then .document.All.tags("div")(i).innerHTML = ""    '关闭“筑业软件留言系统”
  17.             If .document.All.tags("div")(i).className = "content_divs_body_cnsL2" Then .document.All.tags("div")(i).innerHTML = ""    '屏蔽“典型客户”,通过类名查找
  18.             If .document.All.tags("div")(i).className = "content_divs_body_cnsR" Then .document.All.tags("div")(i).innerHTML = ""    '屏蔽“筑业软件全国服务网络”
  19.         Next i
  20.     End With
  21. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-9-14 11:10 | 显示全部楼层
蓝天630902 发表于 2012-9-14 08:48
其实呢,上面的还可以做得更干净些:

找关闭广告的代码要看ID、CLASSNAME,有些名字特复杂,要如何判断。
比如:http://cache.3q3q.cc:8585/kehuan/11369/
这个网站,我看了半天也没看出哪个是要关闭的按钮?谢谢

TA的精华主题

TA的得分主题

发表于 2012-9-14 14:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
蓝天630902 发表于 2012-9-14 08:48
其实呢,上面的还可以做得更干净些:

你这个网站http://de.yusuan.com/page_content.asp?content=98
找关闭广告的代码要看ID、CLASSNAME,有些名字特复杂,要如何判断。
你是如何迅速找出的,你看DIV的classname、id非常多,有几十个,有些靠英文能猜出来,有些的意思却不大好明白。有什么快速的好办吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-14 15:18 | 显示全部楼层
cumulonimbus 发表于 2012-9-14 14:34
你这个网站http://de.yusuan.com/page_content.asp?content=98
找关闭广告的代码要看ID、CLASSNAME,有些 ...

Sub 先看一个东方财富()
    On Error Resume Next
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "http://www.eastmoney.com/"
        Do Until .readyState = 4
            DoEvents
        Loop
        k = 0
        For i = 1 To .document.All.Length - 1
            If .document.All(i).innerText = "关闭" Then
                k = k + 1
                Cells(k, 1) = .document.All(i).tagName
                .document.All(i).innerHTML = ""
            End If
        Next i
    End With
End Sub

'这里为什么是“innerText”而不是别的什么呢?
'这是因为两边的广告中的“关闭”是可以复制的“文本”,一般来说“innerText”可见并能复制
'所以这里直接采用“innerText”
'下面再说说“http://de.yusuan.com/page_content.asp?content=98”

TA的精华主题

TA的得分主题

发表于 2012-9-14 15:29 | 显示全部楼层
蓝天630902 发表于 2012-9-14 15:18
Sub 先看一个东方财富()
    On Error Resume Next
    With CreateObject("InternetExplorer.Applicat ...

Sub 可视化查找()
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "http://www.people.com.cn/n/2012/0912/c346186-18987485.html"
        Do Until .readyState = 4
            DoEvents
        Loop
        For i = 0 To .document.All.tags("input").Length - 1
            .document.All.tags("input")(i).Width = 100
            .document.All.tags("input")(i).Height = 100

            .document.All.tags("input")(i).Value = i
            .document.All.tags("input")(i).Style.Color = "red"
        Next i
    End With
End Sub
我发现这个程序对人民网不管用哈

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-14 15:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cumulonimbus 发表于 2012-9-14 15:29
Sub 可视化查找()
    With CreateObject("InternetExplorer.Application")
        .Visible = True

又绕进去了,到别的地方去。

现在讲“http://de.yusuan.com/page_content.asp?content=98”,

Sub 再看筑业网()
    On Error Resume Next
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "http://de.yusuan.com/page_content.asp?content=98"
        Do Until .readyState = 4
            DoEvents
        Loop
        t1 = Timer
        Do Until Timer > t1 + 5    '这里等5秒,主要是让右侧的讨厌的家伙全部出现
            DoEvents
        Loop
        k = 0
        For i = 1 To .document.All.Length - 1
            If .document.All(i).innerText = "筑业在线客服" Or .document.All(i).innerText = "筑业软件留言系统" Or Left(.document.All(i).innerText, 11) = "网站管理员请求和您通话" Then
                k = k + 1
                Cells(k, 1) = .document.All(i).tagName
                .document.All(i).parentElement.innerHTML = ""
            End If
        Next i
    End With
End Sub

'这里“筑业在线客服”、“筑业软件留言系统”以及“网站管理员请求和您通话(本系统由TQ提供)”都是是可以复制的“文本”。所以也采用“innerText”。
'可是,只是关闭了右下角的,左边只是闪了一下,没关闭;中间的根本就是不反应。
'有点头昏!现在。
'

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-9-14 19:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
蓝天630902 发表于 2012-9-14 15:52
又绕进去了,到别的地方去。

现在讲“http://de.yusuan.com/page_content.asp?content=98”,

奇怪,为什么关不掉呢?

TA的精华主题

TA的得分主题

发表于 2012-9-14 20:09 | 显示全部楼层
本帖最后由 引子玄 于 2012-9-14 20:47 编辑
蓝天630902 发表于 2012-9-10 04:59
我们,还可以改变它的文字内容:


关于“清除标签内容”的做法,是否可以借用到XMLHTTP对象的“网页采集”中?
比如:
1、对源码中<div>、、、</div>中的内容提取,XMLHTTP采集来个反向清除,剩下的就是DIV标签内的文本内容了。
2、能否把OUTERHTML的标签提取,引用到XMLHTTP的源码提取中。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-14 20:47 | 显示全部楼层
引子玄 发表于 2012-9-14 20:09
关于“清除标签内容”的做法,是否可以借用到XMLHTTP对象的“网页采集”中?
比如:对源码中、、、中的 ...

XMLHTTP对象,没有像ie对象那样的丰富的“标签”元素,所以,操作起来只能死气沉沉地用“Replace , Split ”方法,但是它速度快。
关于“清除标签内容”的做法,是否可以借用到XMLHTTP对象的“网页采集”中,我真不清楚。

Vba是微软的,ie是微软的,他们之间很多功能没有挖掘。

Sub 比如说吧()
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "http://baidu.lehecai.com/lottery/qlc/"
        Do Until .readyState = 4
            DoEvents
        Loop
        .document.body.Style.Zoom = "200%"    '屏幕放大2倍
        For i = 0 To .document.All.tags("input").Length - 1
            .document.All.tags("input")(i).Value = .document.All.tags("input")(i).ID
            If .document.All.tags("input")(i).ID = "standard_add_to_list_btn" Then .document.All.tags("input")(i).ScrollIntoView    '定位到第i个input元素(input标签)位置
        Next i
    End With
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 21:07 , Processed in 0.046104 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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