|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
甚至一个有经验的Windows管理者也可以轻松部署并开始学习它,而你不需投入一分钱来了解这个数据库。access
用Access剖析网站一例
成绩:
怎样用Access剖析一个网站,大概在网站上提交一个查询,失掉了局后存储进数据库哪?
怎样用Access下载DVBBS论坛上一切的帖子?
怎样用ACCESS编写注水程序?
办法一:
谜底十分复杂――DHTML编程。
有人大概问了,ACCESS利用的是VBA,而DHTML中利用的是VBS怎样大概通用哪?实在VBS/VBA都是VB的子集。在Access中只需援用
MicrosoftInternetControls
MicrosoftHTMLObjectLibrary
便可,然后在窗体上到场“MicrosoftWeb扫瞄器”控件
好了,上面就以我写的一个读取某IP物理地区查询网站页面的数据库为例申明DHTML/“MicrosoftWeb扫瞄器”控件在ACCESS的使用吧。
“MicrosoftWeb扫瞄器”控件的感化是甚么哪?次要就是为了取得DOCUMENT工具的,DHTML的操纵都是以DOCUMENT工具为运转基本的。
要完成读取网页的功效我们必需懂得DHTML的几个复杂的工具和属性
1、DOCUMENT工具:代表这全部HTML文档
2、BODY工具:是DOCUMENT工具的子工具,内里存储着一切显现给用户看的HTML代码
3、innerText属性:页面中显现给客户看的文本,注重:不是HTML代码呦
4、innerHTML属性:组成页面的HTML代码
5、工具.all.length属性:页面中一切element的个数。(all用于暗示一切工具)
ok,接上去就让我们一边写代码,一边剖析吧:
OptionCompareDatabase
DimblnSwitchAsBoolean
PrivateSubCommand1_Click()用于启动扫瞄功效
Me.WebBrowser3.Navigate("http://ip.loveroot.com/index.php?job=search")
EndSub
PrivateSubCommand11_Click()将必要搜刮的IP写进全局变量
splitIPText1.Value
EndSub
FunctionsplitIP(strip)将必要搜刮的IP写进全局变量
Dima()AsString
strip=strip&"."
a=Split(strip,".")
DimiAsLong
Fori=0ToUBound(a)
Ifa(i)=""Thena(i)="0"
lngSearchIP(4-i)=CLng(a(i))
Nexti
EndFunction
SubWriteLog(ip1AsString)读取了局
DimdcAsMSHTML.HTMLDocument
DimBdAsMSHTML.HTMLBody
DimElAsMSHTML.HTMLElementCollection
DimstripAsString
DimstrAddAsString
DimstrSql
DimiAsLong
Setdc=WebBrowser3.Document
SetBd=dc.body
DimlngStartAsLong
轮回DOCUMENT中一切的元素猎取必要的字符
Fori=0Todc.all.length-1
因为该服务重视写界面,我改了一下剖析代码
Ifdc.all(i).tagName="p"AndLeft(dc.all(i).innerText,4)="查询了局"Then
Ifdc.all(i).tagName="p"AndLeft(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="updateipaddressset[ip1]="&strip&",[add]="&strAdd&"wheremark=last"
CurrentProject.Connection.ExecutestrSql
strSql="insertintoipaddress([ip1],[add],[mark],[enip])values("&strip&","&strAdd&",no,"&CStr(enaddr(strip))&")"
CurrentProject.Connection.ExecutestrSql
ExitFor
EndIf
Nexti
DimstrNewIPAsString
strNewIP=refreshIP
OnErrorResumeNext
使用DHTML的innerHTML来变动网页的源代码,创建一个复杂的FORM,然后提交给服务器,持续查询上面的IP
Bd.innerHTML="<formmethod=POSTaction=index.php?job=searchtarget=_parent><inputtype=textname=search_ip><inputtype=submitvalue=查询name=B1></form>"
在INPUTTEXTsearch_ip中填进IP。
dc.all.Item("search_ip").Value=strNewIP
用DHTML提交FORM到服务器
dc.all.Item("b1").Click
EndSub
PrivateSubForm_Open(CancelAsInteger)
Text1.Value=Nz(DLookup("ip1","ipaddress","[mark]=last"&Me.Caption&""),"1.0.0.0")
EndSub
PrivateSubWebBrowser3_DownloadComplete()
该事务在页面乐成下载到当地时运转,这时候候DOCUMENT工具
已完整被客户端扫瞄器读取了,我们只需猎取Body工具中的innerHTML便可
IfLen(strNowIP)=0Then
splitIPText1.Value
EndIf
Ifcheck1.Value=TrueThen
CallWriteLog("61.12.15.117")
EndIf
EndSub
FunctionrefreshIP()AsString搜刮完一个IP今后再搜刮上面一个
DimiAsLong
lngSearchIP(2)=lngSearchIP(2)+1
Fori=2To4
IflngSearchIP(i)>=256Then
lngSearchIP(i)=0
lngSearchIP(i+1)=lngSearchIP(i+1)+1
EndIf
Nexti
refreshIP=Format(lngSearchIP(4),"0")&"."&Format(lngSearchIP(3),"0")&"."&Format(lngSearchIP(2),"0")&"."&Format(lngSearchIP(1),"0")
strNowIP=refreshIP
Debug.PrintrefreshIP
EndFunction
以下代码请新建一个模块后COPY出来
OptionCompareDatabase
PubliclngSearchIP(4)AsLong
PublicstrNowIPAsString
PublicstrOKAddressAsString
PublicstrOKIPAsString
PublicblnStopAsBoolean
FunctionwriteOKIP()
DimrsAsNewADODB.Recordset
DimstrSqlAsString
strSql="select*fromipaddressorderbyenip"
rs.OpenstrSql,CurrentProject.Connection,1,1
DimstrAdd1AsString
DimstrIP1AsString
DimlngENIP1AsLong
DimstrStateAsString
strState="start"
DimiAsLong
DimiAAsLong
iA=rs.RecordCount
DoUntilrs.EOF
IfblnStop=TrueThenExitFunction
IfstrAdd1rs("add")Then
strSql="updateipaddress_oksetip2="&strIP1&",enip2="&Str(lngENIP1)&",mark=wheremark=setting"
CurrentProject.Connection.ExecutestrSql
DoEvents
strSql="insertintoipaddress_ok(ip1,enip1,[mark],[add])values("&rs("ip1")&","&Str(rs("enip"))&",setting,"&rs("add")&")"
CurrentProject.Connection.ExecutestrSql
DoEvents
EndIf
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="updateipaddress_oksetip2=mid(ip2,1,len(ip2)-2)&255"
CurrentProject.Connection.ExecutestrSql
strSql="updateipaddress_oksetenip1=enaddr(ip1)"
CurrentProject.Connection.ExecutestrSql
strSql="updateipaddress_oksetenip2=enaddr(ip2)"
CurrentProject.Connection.ExecutestrSql
EndFunction
Functionenaddr(SipAsString)AsDouble
用代办署理没法毗连的成绩还要办理
将字符的IP编码为长整的IP
OnErrorResumeNext
Dimstr1AsString
Dimstr2AsString
Dimstr3AsString
Dimstr4AsString
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
EndFunction
Functiondeaddr(Sip)
将编码为长整的IP重现转换为字符型的IP
Dims1,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)
EndFunction
示例请参考:http://access911.net/down/eg/User_DHTML_search_IP.rar
上述程序会主动往http://ip.loveroot.com/index.php?job=search搜刮一切的IP和对应的物理地点并保留到数据库中
订正:方才上了一下网站,发明界面居然改了,又从头修正了一下读取页面的程序。
关于WebBrowser控件的材料请参考VB6中MSDN的以下章节
InternetClientSDK
InternetTools&Technologies
ReusingtheWebBrowserandMSHTML
inet401/help/itt/ieprog/IEProg.htm#book_browsing(BOOKMARK)
http://access911.net站长保藏
一个相关的问题是第三方支持的资格问题,尽管直接来自厂商的支持和服务可以一定程度上减缓这个问题,但是,对于有的企业来说,通过强有力的本地化支持显然更有吸引力。 |
|