找回密码
 加入
搜索
楼主: superflq

[IE类操作] 准备用AutoIT做个浏览器,可是去广告问题没办法解决,求帮助

 火.. [复制链接]
发表于 2011-10-14 15:45:55 | 显示全部楼层
收藏,学了,感谢!
 楼主| 发表于 2011-10-14 23:03:34 | 显示全部楼层
~~~~各位大大呢~~
发表于 2011-10-15 06:54:25 | 显示全部楼层
大大们不可能没招啊。。。。
 楼主| 发表于 2011-10-15 20:11:52 | 显示全部楼层
每天都来关注下
发表于 2011-10-16 04:04:05 | 显示全部楼层
本帖最后由 lynfr8 于 2011-10-16 04:19 编辑

暂时只能用这种方法处理内嵌网页的广告
AU3应该是可以做到类似opera在网页加载完毕显示前进行内容拦截的
不过要非常熟悉网页事件和IE消息钩子
例子是读取已经显示的网页源码进行修改
当网页发生点击事件可以检测到再重新进行源码替换
但这种方法无疑不是高效的
更佳解决思路应该是:
1.检测到网页点击跳转事件
2.拦截IE下载内容进行分析
3.发现目标广告链接(包括js、图片、声音、swf等)则“欺骗”IE已下载完毕
本人不才能力有限只能抛砖引玉了
有兴趣可以借鉴下此文的拦截机制
《广告屏蔽软件开发技术方案》(计算机文献,写得非常好!几经艰难搜索所得,象征性收1大洋,呵呵...)

免费再送一文:
《C  中使用BHO来屏蔽特定网站》
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <GuiStatusBar.au3>
#include <GuiConstantsEx.au3>
#include <EditConstants.au3>
#include <IE.au3>
#include <Misc.au3>
HotKeySet("{Esc}", "OUT")
Global $Rect = WinGetPos("[CLASS:Shell_TrayWnd]")
Global $IE, $Form
Global $Web = "http://www.99uc.net/"
Global $title = "浏览器"
_IEErrorHandlerRegister()
$IE = _IECreateEmbedded()
_IEAction($IE, "stop")
$Form = GUICreate($title, @DesktopWidth, @DesktopHeight - $Rect[3], 0, 0, $WS_POPUP)
$GUIActiveX = GUICtrlCreateObj($IE, 2, 2, @DesktopWidth - 2, @DesktopHeight - $Rect[3] - 5)
_IENavigate($IE, $Web, 0)
GUISetState(@SW_SHOW, $Form)
_IELoadWait($IE)

While 1
        _ReduceMemory(@AutoItPID)
        Sleep(100)
WEnd

Func OUT()
$doc=_IEDocReadHTML($IE)
$doc1=StringRegExpReplace($doc,'<img src=".*?/>','')
$doc2=StringRegExpReplace($doc1,'src="[^http]','src="http://www.99uc.net/')
$doc3=StringRegExpReplace($doc2,'href="[^http]','href="http://www.99uc.net/')
$doc4=StringRegExpReplace($doc3,'http://www.99uc.net/adfile/A0.js|http://www.99uc.net/adfile/banner.js|http://www.99uc.net/adfile/top.js','')
$doc5=StringRegExpReplace($doc4,'<DIV id=banner class=banner>(?s).+?</A> </DIV></DIV>','')
$doc6=StringRegExpReplace($doc5,'<DIV class=topadbox>(?s).+?<DIV class=headertop>','<DIV class=headertop>')
$doc7=StringRegExpReplace($doc6,'<DIV class=topadbox>(?s).+?<DIV class=mainbox>','<DIV class=mainbox>')
$doc8=StringRegExpReplace($doc7,'</BODY></HTML>(?s).+?</a>','</BODY></HTML>')
_IEDocWriteHTML($IE,$doc8)
       ; Exit
EndFunc   ;==>OUT

Func _ReduceMemory($i_PID = -1)
        If $i_PID <> -1 Then
                Local $ai_Handle = DllCall("kernel32.dll", "int", "OpenProcess", "int", 0x1f0fff, "int", False, "int", $i_PID)
                Local $ai_Return = DllCall("psapi.dll", "int", "EmptyWorkingSet", "long", $ai_Handle[0])
                DllCall("kernel32.dll", "int", "CloseHandle", "int", $ai_Handle[0])
        Else
                Local $ai_Return = DllCall("psapi.dll", "int", "EmptyWorkingSet", "long", -1)
        EndIf
        Return $ai_Return[0]
EndFunc   ;==>_ReduceMemory

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +30 收起 理由
superflq + 30 谢谢大大指教,再研究研究

查看全部评分

发表于 2011-10-16 04:16:56 | 显示全部楼层
本帖最后由 lynfr8 于 2011-10-16 04:22 编辑

通过读取源码并进行拦截的效果不是十分理想
可能是错杀了一些js脚本导致网页布局也产生了变形
广告拦截不是一件轻松可以实现的
如果是个人用就将就着用
如果要开发可拦截广告的浏览器
呵呵。。那就得再努力学习网页css原理、js和微软老大的“IE”事件了
工程艰巨,革命尚未成功,同志还需努力!
另外
楼主如果将题目改为:
《AU3内嵌浏览器广告屏蔽开发技术的疑问》
可能会更有噱头吸引到那些已经研究过这个领域的牛人哦


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-10-16 13:26:48 | 显示全部楼层
支持一下,- -
 楼主| 发表于 2011-10-16 17:27:27 | 显示全部楼层
谢谢大大指教~~
发表于 2011-10-17 10:59:32 | 显示全部楼层
回复 5# happytc

哈,我也是。想想,做浏览器,多强悍的人呀。
发表于 2011-10-18 03:30:14 | 显示全部楼层
本帖最后由 papapa314 于 2011-10-18 03:34 编辑

回复 21# lynfr8


    这样是否会更简便呢?

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 623, 442, 192, 124)
$oIE = ObjCreate("Shell.Explorer.2")
$Obj1_ctrl = GUICtrlCreateObj($oIE, 64, 48, 458, 324)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$oIE.navigate("www.google.com.hk")
_IELoadWait($oIE)

$oIE.document.getelementbyid("gb_2").style.display="none"
$oIE.document.getelementbyid("gb_1").style.display="none"
$oIE.document.getelementbyid("logo").style.display="none"

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

评分

参与人数 1金钱 +60 收起 理由
superflq + 60 谢谢大大指教~~

查看全部评分

 楼主| 发表于 2011-10-18 17:36:43 | 显示全部楼层
回复  lynfr8


    这样是否会更简便呢?

#include
#include
#include
#Region ### START Ko ...
papapa314 发表于 2011-10-18 03:30



   
大大又提供了一个新思路~~
 楼主| 发表于 2011-10-18 19:25:34 | 显示全部楼层
本帖最后由 superflq 于 2011-11-1 20:34 编辑
回复  lynfr8


    这样是否会更简便呢?

#include
#include
#include
#Region ### START Ko ...
papapa314 发表于 2011-10-18 03:30




试了试 很强大。。。~
发表于 2011-10-26 16:39:23 | 显示全部楼层
学习,收藏,谢谢分享
发表于 2011-10-30 22:34:09 | 显示全部楼层
要是不需要调用ie内核多好啊
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 14:24 , Processed in 0.076006 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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