sxd 发表于 2009-5-25 19:49:17

啥也不说了 眼泪哗哗的:face (35):
大家共同进步

文白 发表于 2009-5-25 23:54:02

把要进行正则处理的页面地址发上来
或把其中的html代码(打包)发上来

看不懂问题
有心答疑 也只是无能为力

lynfr8 发表于 2009-5-26 00:01:06

文白的正则就是牛啊
:face (20):

lynfr8 发表于 2009-5-26 00:01:17

文白的正则就是牛啊
:face (20):

lxz 发表于 2009-5-26 06:51:16

文白确实厉害.

jhkdqaa 发表于 2009-5-31 11:23:26

回头看了下 尽然有这么多回复
lynfr8 我不知道你在说什么
怎么说我没有分享内?我不是说明了错误是在偏移量问题.我无视了他 所以造成了之前的错误.
我自认为很菜鸟,以为说出偏移量你们都知道了的
说明里面有呀:
StringRegExp ( "测试", "模式" [, 标志 ] [, 偏移量 ] ] )

jhkdqaa 发表于 2009-5-31 11:27:54

小菜继续补充下,这个问题已经解决.
我写这段是为了弹出窗口输入验证码.
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <INet.au3>
#include <array.au3>
#include <Date.au3>
#AutoIt3Wrapper_run_debug_mode=Y
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("每日自动刷新", 840, 631, 189, 117)
$oIE = _IECreateEmbedded()
GUICtrlCreateObj($oIE, 16, 16, 809, 500)
$Button2 = GUICtrlCreateButton("刷新", 672, 568, 145, 49, $WS_GROUP)
$Edit = GUICtrlCreateEdit("", 32, 560, 601, 65)
GUICtrlSetData(-1, "欢迎回来")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Dim $dbname = "D:\database.mdb"
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button2
                        ecplaza()
        EndSwitch
WEnd
Func ecplaza()
        $conn = ObjCreate("ADODB.Connection")
        $rs = ObjCreate("ADODB.Recordset")
        $conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $dbname & ";Jet Oledb:Database ")
        $rs.ActiveConnection = $conn
        $rs.Open("Select * From allcustomer where website = 'ecplaza'")
        while Not $rs.eof And Not $rs.bof
                $oIE.navigate("http://member.ecplaza.net/auth.do")
                _IELoadWait($oIE)
                $temps = _IEDocReadHTML($oIE)
                $nOffset = 1
                While 1
                        $array = StringRegExp($temps, "value=(.{0,60})name=ConfirmCD", 1, $nOffset)

                        If @error = 0 Then
                                $nOffset = @extended
                        Else
                                ExitLoop
                        EndIf
                        $img = $array
                        $timg = FileOpen("img.txt", 2)
                        FileWrite($timg, $img)
                        FileClose($timg)
                WEnd
                $p = 1
                pngform()
                $UserName = _IEGetObjById($oIE, "MemberID")
                If IsObj($UserName) Then $UserName.value = $rs.Fields(1).value
                $PassWord = _IEGetObjById($oIE, "Password")
                If IsObj($PassWord) Then $PassWord.value = $rs.Fields(2).value
                $ctest = FileOpen("code.txt", 0)
                $contest = FileRead($ctest)
                $ConfirmText = _IEGetObjById($oIE, "ConfirmText")
                If IsObj($ConfirmText) Then $ConfirmText.value = $contest
                FileClose($ctest)
                _IEFormImageClick($oIE, "http://image.ecplaza.net/global/tonta/images/gMember/but_login.gif", "src")
                _IELoadWait($oIE)
                $oIE.navigate("http://member.ecplaza.net/selloffer.do")
                _IELoadWait($oIE)
                $tempp = _IEDocReadHTML($oIE)
                If StringInStr($tempp, "javascript:GoPage(2)") Then
                        $p = 2
                        If StringInStr($tempp, "javascript:GoPage(3)") Then
                                $p = 3
                                If StringInStr($tempp, "javascript:GoPage(4)") Then
                                        $p = 4
                                        If StringInStr($tempp, "javascript:GoPage(5)") Then
                                                $p = 5
                                        EndIf
                                EndIf
                        EndIf
                EndIf
                $months = @MON
                $days = @MDAY
                $ds = 12 - $months
                $df = 12 - $ds
                If StringInStr($tempp, "" & $df & "/" & $days) Then
                        _IELinkClickByText($oIE, "Logout")
                        _IELoadWait($oIE)
                        Sleep(5000)
                        $rs.movenext
                Else
                        _IELinkClickByText($oIE, "Select All")
                        _IELoadWait($oIE)
                        _IELoadWait($oIE)
                        _IENavigate($oIE, "javascript:DoRepost();")
                        Send("{enter}")
                        _IELoadWait($oIE)
                        For $s = 1 To $p
                                If $s > 1 Then
                                        _IENavigate($oIE, "javascript:GoPage(" & $s & ");")
                                        _IELinkClickByText($oIE, "Select All")
                                        _IELoadWait($oIE)
                                        _IELoadWait($oIE)
                                        _IENavigate($oIE, "javascript:DoRepost();")
                                        Send("{enter}")
                                        _IELoadWait($oIE)
                                EndIf
                        Next
                        _IELinkClickByText($oIE, "Logout")
                        _IELoadWait($oIE)
                        Sleep(5000)
                        $rs.movenext
                EndIf
        WEnd
        $rs.close
        $conn.Close
EndFunc   ;==>ecplaza
Func pngform()
        $Form2 = GUICreate("加载网页中的验证码演示:", 280, 180)
        $Label1 = GUICtrlCreateLabel("验证码:", 8, 43, 70, 17)
        GUICtrlSetFont(-1, 12, 400, 0, "黑体")
        GUICtrlSetColor(-1, 0xFF0000)
        $Input1 = GUICtrlCreateInput("", 90, 90, 113, 35)
        $Button8 = GUICtrlCreateButton("确定", 110, 128, 75, 35, $WS_GROUP)
        $oIE_code = _IECreateEmbedded()
        $GUIActiveX = GUICtrlCreateObj($oIE_code, 70, 24, 150, 50)
        _IENavigate($oIE_code, "about:blank", 1)
        $oBody = _IETagNameGetCollection($oIE_code, "body", 0)
        _IEDocInsertHTML($oBody, 'IE加载中...', "afterbegin")
        GUISetState(@SW_SHOW)
        _IEAction($oIE_code, "refresh")
        $oBody = _IETagNameGetCollection($oIE_code, "body", 0)
        $cimg = FileOpen("img.txt", 0)
        $contest = FileRead($cimg)
        _IEDocInsertHTML($oBody, '<img src="http://member.ecplaza.net/auth.do?cmd=confirmImage&ConfirmCD=' & $contest & '">', "afterbegin")
        FileClose($cimg)
        While 1
                $pMsg = GUIGetMsg()
                Switch $pMsg
                        Case $GUI_EVENT_CLOSE
                                GUIDelete($Form2)
                                ExitLoop
                        Case $Button8
                                $code = GUICtrlRead($Input1)
                                $test = FileOpen("code.txt", 2)
                                FileWrite($test, $code)
                                FileClose($test)
                                GUIDelete($Form2)
                                ExitLoop
                EndSwitch
        WEnd
EndFunc   ;==>pngform
这是这段代码,

jhkdqaa 发表于 2009-5-31 11:32:30

$temps = _IEDocReadHTML($oIE)
                $nOffset = 1
                While 1
                        $array = StringRegExp($temps, "value=(.{0,60})name=ConfirmCD", 1, $nOffset)

                        If @error = 0 Then
                              $nOffset = @extended
                        Else
                              ExitLoop
                        EndIf
                        $img = $array
                        $timg = FileOpen("img.txt", 2)
                        FileWrite($timg, $img)
                        FileClose($timg)
                WEnd
这段是用简单的正则 获取网页html里面一对一的那段代码.用于后面的页面跳转什么的,比如http://www.某某.com/什么什么.pnp 这个是登陆后的个人用户界面.
那么在一对一的网站就应该是http://www.某某.com/什么什么.pnp?id=一对一的那串代码
大致是这样.

jhkdqaa 发表于 2009-5-31 11:34:42

:face (32):发错了 这是另外一段代码.我提问的这段正则是用于计算一个网页内有多少个需要的内容.
是这段
                $nOffset = 1
                $CA = 0
                While 1
                        $array = StringRegExp($temps, "javascript:updateProductItem(.{0,30})\)", 1, $nOffset)

                        If @error = 0 Then
                                $nOffset = @extended
                        Else
                                ExitLoop
                        EndIf
                        for $z = 0 to UBound($array) - 1
                                $CA = $CA + 1
                        Next
                WEnd
好晕:face (32):

lynfr8 发表于 2009-5-31 14:28:26

我当时可能也是晕直接对于你的偏移那句回复无视了,在这我抱歉。不管怎样,希望以后大家保持良好的沟通,不管是问问题的和答问题的。
页: 1 [2]
查看完整版本: 正则匹配问题