用 Access 分析网站一例

用 Access 分析网站一例

问题:

| 如何用 __ Access __ 分析一个网站,或者在网站上提交一个查询,得到结果后存储进数据库哪?
如何用 __ Access __ 下载 __ DVBBS __ 论坛上所有的帖子?

如何用 __ ACCESS __ 编写灌水程序?

方法一:

| 答案非常简单—— __ DHTML __ 编程。
有人可能问了,ACCESS __ 使用的是 __ VBA __ ,而 __ DHTML __ 中使用的是 __ VBS __ 怎么可能通用哪?其实 __ VBS __ / __ VBA __ 都是 __ VB __ 的子集。在 __ Access __ 中只要引用

Microsoft __ Internet __ Controls
Microsoft __ HTML __ Object __ Library

即可,然后在窗体上加入 __ “Microsoft __ Web __ 浏览器”控件

好了,下面就以我写的一个读取某 __ IP __ 物理地域查询网站页面的数据库为例说明 __ DHTML __ / __ “Microsoft __ Web __ 浏览器”控件在 __ ACCESS __ 的应用吧。

“Microsoft __ Web __ 浏览器”控件的作用是什么哪?主要就是为了获得 __ DOCUMENT __ 对象的,DHTML __ 的操作都是以 __ DOCUMENT __ 对象为运行基础的。

要完成读取网页的功能我们必须了解 __ DHTML __ 的几个简单的对象以及属性
1、DOCUMENT __ 对象:代表这整个 __ HTML __ 文档
2、BODY __ 对象:是 __ DOCUMENT __ 对象的子对象,里面存储着所有显示给用户看的 __ HTML __ 代码
3、innerText __ 属性:页面中显示给客户看的文本,注意:不是 __ HTML __ 代码呦
4、innerHTML属性:构成页面的 __ HTML __ 代码
5、对象.all.length属性:页面中所有 __ element __ 的个数。(all __ 用于表示所有对象)

ok __ ,接下来就让我们一边写代码,一边分析吧:
| Option __ Compare __ Database
Dim __ blnSwitch __ As __ Boolean
Private __ Sub __ Command1_Click() __ __ __ __ __ __ __ __ '用于启动浏览功能
__ __ __ __ Me.WebBrowser3.Navigate __ ("http://ip.loveroot.com/index.php?job=search")
End __ Sub

Private __ Sub __ Command11_Click() __ __ __ '将需要搜索的IP __ 写入全局变量
__ __ __ __ splitIP __ Text1.Value
End __ Sub
Function __ splitIP(strip) __ '将需要搜索的IP __ 写入全局变量
Dim __ a() __ As __ String
strip __ = __ strip __ & __ "."
a __ = __ Split(strip, __ ".")

Dim __ i __ As __ Long
For __ i __ = __ 0 __ To __ UBound(a)
__ __ __ __ If __ a(i) __ = __ "" __ Then __ a(i) __ = __ "0"
__ __ __ __ lngSearchIP(4 __ - __ i) __ = __ CLng(a(i))
Next __ i

End __ Function

Sub __ WriteLog(ip1 __ As __ String) __ __ __ __ __ __ __ __ __ '读取结果
__ __ __ __ Dim __ dc __ As __ MSHTML.HTMLDocument
__ __ __ __ Dim __ Bd __ As __ MSHTML.HTMLBody
__ __ __ __ Dim __ El __ As __ MSHTML.HTMLElementCollection
__ __ __ __ Dim __ strip __ As __ String
__ __ __ __ Dim __ strAdd __ As __ String
__ __ __ __ Dim __ strSql
__ __ __ __ Dim __ i __ As __ Long
__ __ __ __ Set __ dc __ = __ WebBrowser3.Document
__ __ __ __ Set __ Bd __ = __ dc.body


__ __ __ __ Dim __ lngStart __ As __ Long


__ __ __ __ '循环 __ DOCUMENT __ 中所有的元素获取需要的字符
__ __ __ __ For __ i __ = __ 0 __ To __ dc.all.length __ - __ 1
__ __ __ __ __ __ __ __ '由于该服务器重写界面,我改了一下分析代码
__ __ __ __ __ __ __ __ 'If __ dc.all(i).tagName __ = __ "p" __ And __ Left(dc.all(i).innerText, __ 4) __ = __ "查询结果" __ Then
__ __ __ __ __ __ __ __ If __ dc.all(i).tagName __ = __ "p" __ And __ Left(dc.all(i).innerText, __ 8) __ = __ "官方数据查询结果" __ Then
__ __ __ __ __ __ __ __ __ __ __ __ '由于该服务器重写界面,我改了一下分析代码
__ __ __ __ __ __ __ __ __ __ __ __ 'strAdd __ = __ Mid(dc.all(i).innerText, __ InStr(1, __ dc.all(i).innerText, __ "(") __ + __ 2, __ InStr(1, __ dc.all(i).innerText, __ ")") __ - __ InStr(1, __ dc.all(i).innerText, __ "(") __ - __ 3)
__ __ __ __ __ __ __ __ __ __ __ __ 'strip __ = __ Mid(dc.all(i).innerText, __ InStr(1, __ dc.all(i).innerText, __ "查询结果:") __ + __ 6, __ InStr(1, __ dc.all(i).innerText, __ "(") __ - __ InStr(1, __ dc.all(i).innerText, __ "查询结果:") __ - __ 7)
__ __ __ __ __ __ __ __ __ __ __ __ strAdd __ = __ Right(dc.all(i).innerText, __ Len(dc.all(i).innerText) __ - __ InStr(dc.all(i).innerText, __ " __ - __ ") __ - __ 3)
__ __ __ __ __ __ __ __ __ __ __ __ strip __ = __ strNowIP
__ __ __ __ __ __ __ __ __ __ __ __ LabelSIP.Caption __ = __ strip __ & __ strAdd
__ __ __ __ __ __ __ __ __ __ __ __ 'ok __ 终于得到需要的数据了,用 __ SQL __ 语句直接写入数据库吧
__ __ __ __ __ __ __ __ __ __ __ __ strSql __ = __ "update __ ipaddress __ set __ [ip1]='" __ & __ strip __ & __ "',[add]='" __ & __ strAdd __ & __ "' __ where __ mark='last'"
__ __ __ __ __ __ __ __ __ __ __ __ CurrentProject.Connection.Execute __ strSql
__ __ __ __ __ __ __ __ __ __ __ __ strSql __ = __ "insert __ into __ ipaddress([ip1],[add],[mark],[enip]) __ values('" __ & __ strip __ & __ "','" __ & __ strAdd __ & __ "','no'," __ & __ CStr(enaddr(strip)) __ & __ ")"
__ __ __ __ __ __ __ __ __ __ __ __ CurrentProject.Connection.Execute __ strSql
__ __ __ __ __ __ __ __ __ __ __ __ Exit __ For
__ __ __ __ __ __ __ __ End __ If
__ __ __ __ Next __ i

__ __ __ __ Dim __ strNewIP __ As __ String
__ __ __ __ strNewIP __ = __ refreshIP
__ __ __ __ On __ Error __ Resume __ Next
__ __ __ __ '利用 __ DHTML __ 的 __ innerHTML __ 来更改网页的源代码,建立一个简单的 __ FORM __ ,然后提交给服务器,继续查询下面的 __ IP
__ __ __ __ Bd.innerHTML __ = __ "

1<form __="" action="index.php?job=search" method="POST" target="_parent"><input __="" name="search_ip" type="text"/><input __="" name="B1" type="submit" value="查询"/></form>

"
__ __ __ __ '在 __ INPUT __ TEXT __ search_ip __ 中填入 __ IP。
__ __ __ __ dc.all.Item("search_ip").Value __ = __ strNewIP
__ __ __ __ '用 __ DHTML __ 提交 __ FORM __ 到服务器
__ __ __ __ dc.all.Item("b1").Click
End __ Sub

Private __ Sub __ Form_Open(Cancel __ As __ Integer)
Text1.Value __ = __ Nz(DLookup("ip1", __ "ipaddress", __ "[mark]='last" __ & __ Me.Caption __ & __ "'"), __ "1.0.0.0")

End __ Sub

Private __ Sub __ WebBrowser3_DownloadComplete()
__ __ __ __ '该事件在页面成功下载到本地时运行,这时候 __ DOCUMENT __ 对象
__ __ __ __ '已经完全被客户端浏览器读取了,我们只要获取 __ Body __ 对象中的 __ innerHTML __ 即可
__ __ __ __ If __ Len(strNowIP) __ = __ 0 __ Then
__ __ __ __ __ __ __ __ splitIP __ Text1.Value
__ __ __ __ End __ If


__ __ __ __ If __ check1.Value __ = __ True __ Then
__ __ __ __ __ __ __ __ __ __ __ __ Call __ WriteLog("61.12.15.117")
__ __ __ __ End __ If
End __ Sub

Function __ refreshIP() __ As __ String __ __ __ __ __ __ '搜索完一个IP以后再搜索下面一个
__ __ __ __ Dim __ i __ As __ Long
__ __ __ __ lngSearchIP(2) __ = __ lngSearchIP(2) __ + __ 1
__ __ __ __ For __ i __ = __ 2 __ To __ 4
__ __ __ __ __ __ __ __ If __ lngSearchIP(i) __ >= __ 256 __ Then
__ __ __ __ __ __ __ __ __ __ __ __ lngSearchIP(i) __ = __ 0
__ __ __ __ __ __ __ __ __ __ __ __ lngSearchIP(i __ + __ 1) __ = __ lngSearchIP(i __ + __ 1) __ + __ 1
__ __ __ __ __ __ __ __ End __ If
__ __ __ __ Next __ i
__ __ __ __ refreshIP __ = __ Format(lngSearchIP(4), __ "0") __ & __ "." __ & __ Format(lngSearchIP(3), __ "0") __ & __ "." __ & __ Format(lngSearchIP(2), __ "0") __ & __ "." __ & __ Format(lngSearchIP(1), __ "0")
__ __ __ __ strNowIP __ = __ refreshIP
__ __ __ __ Debug.Print __ refreshIP
End __ Function


以下代码请新建一个模块后 __ COPY __ 进去
Option __ Compare __ Database
Public __ lngSearchIP(4) __ As __ Long
Public __ strNowIP __ As __ String
Public __ strOKAddress __ As __ String
Public __ strOKIP __ As __ String
Public __ blnStop __ As __ Boolean
Function __ writeOKIP()
__ __ __ __ Dim __ rs __ As __ New __ ADODB.Recordset
__ __ __ __ Dim __ strSql __ As __ String


__ __ __ __ strSql __ = __ "select __ * __ from __ ipaddress __ order __ by __ enip"
__ __ __ __ rs.Open __ strSql, __ CurrentProject.Connection, __ 1, __ 1


__ __ __ __ Dim __ strAdd1 __ As __ String
__ __ __ __ Dim __ strIP1 __ As __ String
__ __ __ __ Dim __ lngENIP1 __ As __ Long
__ __ __ __ Dim __ strState __ As __ String
__ __ __ __ strState __ = __ "start"


__ __ __ __ Dim __ i __ As __ Long
__ __ __ __ Dim __ iA __ As __ Long
__ __ __ __ iA __ = __ rs.RecordCount


__ __ __ __ Do __ Until __ rs.EOF
__ __ __ __ __ __ __ __ If __ blnStop __ = __ True __ Then __ Exit __ Function
__ __ __ __ __ __ __ __ If __ strAdd1 __ <> __ rs("add") __ Then
__ __ __ __ __ __ __ __ __ __ __ __ strSql __ = __ "update __ ipaddress_ok __ set __ ip2='" __ & __ strIP1 __ & __ " __ ',enip2=" __ & __ Str(lngENIP1) __ & __ ",mark='' __ where __ mark='setting'"
__ __ __ __ __ __ __ __ __ __ __ __ CurrentProject.Connection.Execute __ strSql
__ __ __ __ __ __ __ __ __ __ __ __ DoEvents
__ __ __ __ __ __ __ __ __ __ __ __ strSql __ = __ "insert __ into __ ipaddress_ok __ (ip1,enip1,[mark],[add]) __ values('" __ & __ rs("ip1") __ & __ "'," __ & __ Str(rs("enip")) __ & __ ",'setting','" __ & __ rs("add") __ & __ "')"
__ __ __ __ __ __ __ __ __ __ __ __ CurrentProject.Connection.Execute __ strSql
__ __ __ __ __ __ __ __ __ __ __ __ DoEvents
__ __ __ __ __ __ __ __ End __ If


__ __ __ __ __ __ __ __ strAdd1 __ = __ rs("add")
__ __ __ __ __ __ __ __ strIP1 __ = __ rs("ip1")
__ __ __ __ __ __ __ __ lngENIP1 __ = __ rs("enip")
__ __ __ __ __ __ __ __ i __ = __ i __ + __ 1
__ __ __ __ __ __ __ __ Form_控制.Label4.Caption __ = __ Str(Int(i __ / __ iA __ * __ 10000) __ / __ 100) __ & __ "%"
__ __ __ __ __ __ __ __ rs.MoveNext
__ __ __ __ Loop
__ __ __ __ rs.Close


__ __ __ __ strSql __ = __ "update __ ipaddress_ok __ set __ ip2=mid(ip2,1,len(ip2)-2) __ & __ '255'"
__ __ __ __ CurrentProject.Connection.Execute __ strSql
__ __ __ __ strSql __ = __ "update __ ipaddress_ok __ set __ enip1=enaddr(ip1)"
__ __ __ __ CurrentProject.Connection.Execute __ strSql
__ __ __ __ strSql __ = __ "update __ ipaddress_ok __ set __ enip2=enaddr(ip2)"
__ __ __ __ CurrentProject.Connection.Execute __ strSql
End __ Function

Function __ enaddr(Sip __ As __ String) __ As __ Double
__ __ __ __ '用代理无法连接的问题还要解决
__ __ __ __ '将字符的 __ IP __ 编码为长整的 __ IP
__ __ __ __ On __ Error __ Resume __ Next
__ __ __ __ Dim __ str1 __ As __ String
__ __ __ __ Dim __ str2 __ As __ String
__ __ __ __ Dim __ str3 __ As __ String
__ __ __ __ Dim __ str4 __ As __ String
__ __ __ __ Sip __ = __ CStr(Sip)
__ __ __ __ str1 __ = __ Left(Sip, __ CInt(InStr(Sip, __ ".") __ - __ 1))
__ __ __ __ Sip __ = __ Mid(Sip, __ CInt(InStr(Sip, __ ".")) __ + __ 1)
__ __ __ __ str2 __ = __ Left(Sip, __ CInt(InStr(Sip, __ ".")) __ - __ 1)
__ __ __ __ Sip __ = __ Mid(Sip, __ CInt(InStr(Sip, __ ".")) __ + __ 1)
__ __ __ __ str3 __ = __ Left(Sip, __ CInt(InStr(Sip, __ ".")) __ - __ 1)
__ __ __ __ str4 __ = __ Mid(Sip, __ CInt(InStr(Sip, __ ".")) __ + __ 1)
__ __ __ __ enaddr __ = __ CLng(str1) __ * __ 256 __ * __ 256 __ * __ 256 __ + __ CLng(str2) __ * __ 256 __ * __ 256 __ + __ CLng(str3) __ * __ 256 __ + __ CLng(str4) __ - __ 1
End __ Function

Function __ deaddr(Sip)
__ __ __ __ '将编码为长整的 __ IP __ 重现转换为字符型的 __ IP
__ __ __ __ Dim __ s1, __ s21, __ s2, __ s31, __ s3, __ s4
__ __ __ __ Sip __ = __ Sip __ + __ 1
__ __ __ __ s1 __ = __ Int(Sip __ / __ 256 __ / __ 256 __ / __ 256)
__ __ __ __ s21 __ = __ s1 __ * __ 256 __ * __ 256 __ * __ 256
__ __ __ __ s2 __ = __ Int((Sip __ - __ s21) __ / __ 256 __ / __ 256)
__ __ __ __ s31 __ = __ s2 __ * __ 256 __ * __ 256 __ + __ s21
__ __ __ __ s3 __ = __ Int((Sip __ - __ s31) __ / __ 256)
__ __ __ __ s4 __ = __ Sip __ - __ s3 __ * __ 256 __ - __ s31
__ __ __ __ deaddr __ = __ CStr(s1) __ + __ "." __ + __ CStr(s2) __ + __ "." __ + __ CStr(s3) __ + __ "." __ + __ CStr(s4)
End __ Function


示例请参考: http://access911.net/down/eg/User_DHTML_search_IP.rar

上述程序会自动去 __ http://ip.loveroot.com/index.php?job=search __ 搜索所有的 __ IP __ 以及对应的物理地址并保存到数据库中

修订:刚才上了一下网站,发现界面竟然改了,又重新修改了一下读取页面的程序。

关于 __ WebBrowser __ 控件的资料请参考 __ VB6 __ 中 __ MSDN __ 的以下章节 __
Internet __ Client __ SDK __
Internet __ Tools __ & __ Technologies
Reusing __ the __ WebBrowser __ and __ MSHTML

inet401/help/itt/ieprog/IEProg.htm#book_browsing(BOOKMARK)

**http://access911. net ** 站长收藏

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus