这是我几年前的文章了,重新恢复一下意识流
本人是大学刚刚毕业从事C++开发半年的小菜鸟,但是对编程非常热爱,今天是第一次鼓起勇气在看雪发非求助帖子,献丑了。
首先说明一下:1.绝大多数Web表单中带有Submit类型按钮并带有Password类型文本框的,我们就可以认为这个表单是一个用来输入账号和密码的表单,我不敢保证100%正确,但是95%以上绝对没有问题。
2.如果一个Web表单包含text类型文本框、textarea类型文本框、Submit类型按钮,我们完全有理由认为这个表单是用来发帖子的。
好了有了以上2点,就有了努力的方向了意识流来了:
1.我们可以建立一个时钟,每隔一段时间去遍历开启的浏览器,并监听浏览器事件
遍历浏览器我们可以用IShellWindows接口指针,这个接口有个方法叫get_count(),我们可以获取到当前开启了多少个浏览器,既然获取到了浏览器个数那么我们就可以用for循环进行遍历,微软还提供了一个接口IWebBrowser2,MSND上解释说IWebBrowser2是浏览器控件或IE的实现,那么我们可以在for循环内把IShellWindows::Item()付给IWebBrowser2的指针
现在的问题是我们如何监听浏览器事件,微软提供了一个函数AtlAdvise(),MSDN上的解释是可以在对象连接点和客户端的sink(我不知道翻译成什么好

也许看到这大家会想,每隔一段时间遍历一次开启的浏览器(在遍历浏览器里面我们当然还要做遍历网页,要不遍历浏览器有什么用




2.我们在遍历浏览器里面加上遍历网页中的表单、表单元素(比如:文本框,提交按钮)
接上面,截然我们有了IWebBrowser2,那么我们首先调用IWebBrowser2::get_Document()获取文档指针,这样我们就获取到了IHTMLDocument2接口的指针,有了IHTMLDocument2接口指针,我们就可以用来遍历网页中的表单了,先调用IHTMLDocument2::get_forms(),这个函数有个Out参数,类型是IHTMLElementCollection的二级指针,这样就获取到了表单集合,然后调用IHTMLDocument2::get_length获取表单数目,老办法用for循环遍历表单,在遍历过程中我们会将每个IHTMLElementCollection::Item(),赋给IHTMLFormElement的指针。
现在又有个问题,我们在获取通过浏览器在Web表单中输入的账户、密码或者是发帖的标题和内容,有很关键的一点就是获取到表单提交这一时刻,当表单刚提交时,我们立即将我们需要的东西拿出来,要不然就没法获取了

各位,不好意思,下班了,周一接着写
转载请注明:http://www.1shi6.com 意识流所著