文件大小:10 k
运行平台:Windows9X/ME/NT/2000/XP
级别评定:
添加时间:2010-6-4 10:19:04
最后更新:2010-6-4 10:19:04
相关链接:无
所需金额:0 元
添加者:管理员
管理首页
使用VB实现邮箱自动注册
使用VB实现邮箱自动注册(一):表单自动提交 前些天在网上看到有人需要邮箱自动注册的程序,于是自己也写了一个,在查资料的过程中我看到一些网友写的类似文章,有一些是基于网络协议,需要了解session,cookie这些东西,对于一个新手来说很繁琐,等到把这些东西搞懂,热情也消耗殆尽。VB的优点就在于可以让那些对于计算机底层不是很了解的人迅速实现自己的程序设计,我找到了一种比较简单的办法,要求对HTML标记语言有所了解即可,现在把自己的经验写出来于各位网友共享,该方法也许不值一提,也许对您有所帮助。 我的办法就是利用控件WebBrowser,我想很多人对它都很熟悉,在新建一个工程之后您要做的是添加两个控件,一个是WebBrowser,另一个是Scriptlet,这两个控件配合使用,就可以完成这个任务了,Scriptlet中的IHTMLDocument2对象可以用来获得WebBrowser控件中的HTML文档。这两个控件的名字在组件对话框里分别叫Microsoft HTML Object Library和Microsoft Internet Controls。 这两个控件添加完成之后,你还需要知道WebBrowser的一个事件DocumentComplete,这个事件在整个网页下载完成之后触发,也就是说在页面完成之后这个事件即被执行,有了这些就可以顺利的实现注册了。 下面以eyou网站的免费邮箱注册为例来实现我的程序设计,新建标准工程后向Form中添加一个WebBrowser控件。所有代码如下: Dim ii As Integer Private Sub Form_Load() WebBrowser1.Navigate "http://freemail.eyou.com/signup.html?bgp=%CE%D2%BD%D3%CA%DC&bgp_enable=on" End Sub Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) Dim doc As IHTMLDocument2 Set doc = WebBrowser1.Document Dim tmp As String If InStr(doc.body.innerText, "寻找一个新的用户名") > 0 Then tmp = "sdfsdf23" + Trim(Str$(ii)) doc.All.Item("uid").focus SendKeys tmp SendKeys "" End If If InStr(doc.body.innerText, "输入您的个人资料") > 0 Then doc.All.Item("Password").Value = "123456" doc.All.Item("Confirm").Value = "123456" doc.All.Item("FirstName").Value = "tomcant" doc.All.Item("question").Value = "what is your name" doc.All.Item("answer").Value = "my name is ddd" doc.All.Item("year").Value = "80" doc.All.Item("month").Value = "3" doc.All.Item("day").Value = "18" doc.All.Item("day").focus SendKeys "" End If If InStr(doc.body.innerText, "申请邮箱成功") > 0 Then ii = ii + 1 WebBrowser1.Navigate "http://freemail.eyou.com/signup.html?bgp=%CE%D2%BD%D3%CA%DC&bgp_enable=on" End If End Sub Eyou的免费邮箱注册入口地址为http://freemail.eyou.com/signup. ... C&bgp_enable=on ,所以要在Form_load事件中使用WebBrowser控件的Navigate方法。 在eyou的注册入口页面完成之后WebBrowser1_DocumentComplete即被执行,在这个函数中主要有三个条件语句,在三个条件语句之前有如下三句: Dim doc As IHTMLDocument2 Set doc = WebBrowser1.Document Dim tmp As String doc定义为IHTMLDocument2对象用以取得WebBrowser1的文档,tmp字符串是循环注册中的用户名,在程序刚开始定义了ii这个integer变量,在每次注册完成之后ii加1附于tmp之后用以改变用户名。 第一个条件语句如下: If InStr(doc.body.innerText, "寻找一个新的用户名") > 0 Then tmp = "sdfsdf23" + Trim(Str$(ii)) doc.All.Item("uid").focus SendKeys tmp SendKeys "" End If 首先判断是否是注册入口页面,通过InStr(doc.body.innerText, "寻找一个新的用户名") > 0语句实现,doc.body.innerText即取得了该页面中的所有文字。如果是则构造一个用户名。doc.All.Item("uid").focus使用户名文本框取得焦点,其中uid是该文本框的ID,这个ID的取得是通过查看HTML源代码得到的,所以要求对HTML标记语言有所了解。使用户名文本框取得焦点之后通过SendKeys函数模拟键盘向文本框发送tmp字符串,这样用户名即填写完成,之后发送回车键提交表单。关于SendKeys函数的使用大家可查阅MSDN帮助。 第二个条件语句首先判断改页面是否是个人资料填写页面,然后填写个人资料,其方法同填写用户名一致,取得个文本框的ID后填写其值,最后提交表单。 最后一个条件语句判断邮箱注册成功后将ii加一,然后将页面重新定位到注册入口页面,至此一个循环完成。 以上代码即实现了自动注册提交。
VB填充IE上的输入框并提交
VB填充IE上的输入框并提交 假设登录页面的HTML代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>testPage</title> </head> <body> <FORM name=chh method = "POST" action = "login.asp"> <table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td width="31%" align="center">用户:</td> <td width="69%" align="left"> <input name="LoginName" type="text" id="LoginName" size="12"> </td> </tr> <tr> <td width="31%" align="center">密码:</td> <td width="69%" align="left"> <input name="LoginPassword" type="password" id="LoginPassword" size="12"> </td> </tr> </table> <input type = "submit" id = "clickme" value = "提交"> </FORM> </body> </html> 很简单的页面,在上面有一个登录的Form,一个用户名输入框LoginName,一个密码输入框LoginPassword和一个提交按钮clickme 然后用IE打开这个页面,注意页面的title设置为testPage。 然后打开VB,在工程中引用Microsoft internet controls: Private Sub Command1_Click() Dim IEList As New ShellWindows Dim browser Dim Doc On Error Resume Next ''遍历当前地浏览器窗口 For Each browser In IEList ''找到需要地IE窗口 If browser.Document.Title = "testPage" Then ''获得浏览器地文档对象 Set Doc = browser.Document ''填写用户名字段 Doc.body.All("LoginName").Value = "eddie" ''填写密码字段 Doc.body.All("LoginPassword").Value = "123456" ''提交 Doc.body.All("clickme").Click End If Next End Sub
使用VB实现邮箱自动注册(二):修改代理服务器
如果一个IP在一段时间过多的注册,则该IP会被封调,一个办法就是修改注册表以修改代理服务器。在这里我使用一个API函数internetsetoption,使用之前要添加一个模块,然后加入如下代码: Public Const internet_option_proxy = 38 Public Const INTERNET_OPEN_TYPE_PROXY = 3 Public Const INTERNET_OPTION_SETTINGS_CHANGED = 39 Type INTERNET_PROXY_INFO dwAccessType As Long lpszProxy As String lpszProxyBypass As String End Type Public Declare Function internetsetoption Lib "wininet.dll" _ Alias "InternetSetOptionA" _ (ByVal hinternet As Long, _ ByVal dwoption As Long, _ ByRef lpbuffer As Any, _ ByVal dwbufferlength As Long) As Long 改代码定义了三个常数和一个结构,该API函数的具体用法请大家查询MSDN。VB修改注册表的办法就太多了,我就不多说了。在WebBrowser1_DocumentComplete事件中在添加一个条件语句,用以判断是否是IP被封的提示页面,代码如下: If InStr(doc.body.innerText, "IP地址在这一段时间内已经注册了太多的用户") > 0 Then Dim options As INTERNET_PROXY_INFO options.dwAccessType = INTERNET_OPEN_TYPE_PROXY options.lpszProxy = "168.10.46.77:80" options.lpszProxyBypass = "" internetsetoption 0, internet_option_proxy, options, LenB(options) Dim don As Double Dim doff As Double Set reg = CreateObject("Ws cript.Shell") a = reg.regwrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer", _ "211.144.96.250:80") a = reg.regwrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", _ 1) internetsetoption 0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0 WebBrowser1.Navigate "http://freemail.eyou.com/signup.html?bgp=%CE%D2%BD%D3%CA%DC&bgp_enable=on" End If 至此代理服务器的修改也完成了。 对于一些有验证码的网站如何识别出图片上的验证码,我还没有办法解决,我试着用VC写了一个图片识别程序,但效果很不理想,希望大家多交流。
1分
0
2分
0
3分
0
4分
0
5分
0
共有 0 人打分
平均得分:0