屏蔽广告的原理、方法和实现:[3]封装成SDK
1、打开VS2012集成开发环境,新建“C#类库”工程,并命名为HDK,然后添加System.Windows.Forms和System.Drawing的引用。如图:
![屏蔽广告的原理、方法和实现:[3]封装成SDK](https://exp-picture.cdn.bcebos.com/05a320a23a42a07af9804080673834bb18efc127.jpg)
2、 然后,再添加新建winform工程,命名为HDKTest,引用程序集HDK,并设置为启动项,用于测试HDK。项目结构如图:
![屏蔽广告的原理、方法和实现:[3]封装成SDK](https://exp-picture.cdn.bcebos.com/a151a233ec3834bb447f5eec8714c27bd3823d24.jpg)
3、在HDK中添加类Element,这是HDK中的基础类。需要一个WebBrowser引用,是网页元素抓取的基础,最好在构造函数中赋值,并且不允许无参的构造函数,如下:
public WebBrowser webBrowser;
public Element(WebBrowser wb) {
this.webBrowser = wb;
}
4、封装直接元素抓取,即封装GetElementById、GetElementByPoint和GetElementByTagName函数。如下图:
![屏蔽广告的原理、方法和实现:[3]封装成SDK](https://exp-picture.cdn.bcebos.com/a31e1214c27bd282e4195df53cb1eef97ebd3624.jpg)
5、接着封装间接元素抓取,即id-pn、id-tn以及从body元素开始的tn。如下:
![屏蔽广告的原理、方法和实现:[3]封装成SDK](https://exp-picture.cdn.bcebos.com/87c8bf46b7b1eef9192db0cfbfb33c4132ba3224.jpg)
6、元素抓取的操作基本封装完成了,下面要对抓取的元素进行操作的封装。使用style方法,我们需要考虑原来的style是否已经存在,若存在则修改,不存在则添加。如下图:
![屏蔽广告的原理、方法和实现:[3]封装成SDK](https://exp-picture.cdn.bcebos.com/7efc527c34b33c41592a2ff2887de137c8762e24.jpg)
1、HDK的封装基本完成,下面是HDK的测试。打卡HDKTest项目的form1,添加一个TextBox控件、一个Button控件、一个WebBrowser控件,并把这些控件分别放到容器TableLayoutPanel中,布局效果如下图:
![屏蔽广告的原理、方法和实现:[3]封装成SDK](https://exp-picture.cdn.bcebos.com/3d002dbad341037d8ca735c5a9bc7dc5ce672d24.jpg)
2、然后在button1的Click事件和webBrowser1的DocumentCompleted事件中添加代码:
private void button1_Click(object sender, EventArgs e)
{
//跳转到http://jingyan.baidu.com/article/fec4bce23e505cf2618d8bd3.html
webBrowser1.Navigate("http://jingyan.baidu.com/article/fec4bce23e505cf2618d8bd3.html");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var em = new HDK.Element(this.webBrowser1);
//id aside-ads-container,pn 1
var a = em.GetElementByParentFormId ("aside-ads-container", 1);
a.Style = HDK.Element.GetNewStyleStr(a.Style, "display", "none");
}
如下图:
![屏蔽广告的原理、方法和实现:[3]封装成SDK](https://exp-picture.cdn.bcebos.com/e076d77622bc7dc5bef7d7ec5e460596b9142924.jpg)
3、最后,运行测试,达到预期效果,如下:
![屏蔽广告的原理、方法和实现:[3]封装成SDK](https://exp-picture.cdn.bcebos.com/23fd63c5cf672b5fa6d6f9253314f4d0b4032724.jpg)
1、通过封装广告屏蔽的原理(找到目标网页元素并设置其style为"display:none")、抓取网页元素的方法(直接法、间接法等)、修改属性的方法(style法),我们就可以得到一个简单SDK-HDK。
2、使用HDK,我们可以快速的屏蔽广告。从原理上讲,我们可以对网页中的元素做任何事,包括隐藏、修改大小、采集数据等等。
3、我们并没有设计一个完善的错误收集和处理的机制,一切错误皆返回Null。
4、选择Release模式,点击生成,我们就得到了一个简易的SDK了!