kk_lee69 发表于 2011-11-12 18:43:07

[已解決]IE操作 關於自動登入網站...找不出程式無法執行的原因...求助高手

本帖最后由 kk_lee69 于 2014-3-26 15:57 编辑

小弟第一次 學習IE 操作......雖然很想用POST 但是 連基本的IE 操作都有問題.....時在搞不懂 只好上來求助

我的程式 語法如下

#include <IE.au3>
$oIE = _IECreate("https://www.XXXX.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.54b.tw%3A8081%2Fc%2Fportal%2Flogin&")
;Sleep(5000)
$oForm = _IEGetObjById($oIE,"show")
$Login = _IEFormElementGetObjByName($oForm,"username")
$Pass = _IEFormElementGetObjByName($oForm,"password")
_IEFormElementSetValue($Login,"A0103")
_IEFormElementSetValue($Pass,"99999")
_IEFormSubmit($oForm)

看樣子 上面的語法應該不會錯的丫但是 真的就是連輸入 帳號 密碼都無法

哪裡出錯呢   可不可以請 高手幫忙一下

autt 发表于 2011-11-12 20:57:52

看到论坛里有现成的登陆代码,那时也试过,可以用..
只是忘记标题了...sorry

xms77 发表于 2011-11-12 21:57:42

IE操作不是很懂,无能为力,sorry,楼下高手来

suiyefeng 发表于 2011-11-12 23:38:43

表单没有名称吧这个
#include <IE.au3>

$oIE = _IECreate("https://www.XXXX.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.54b.tw%3A8081%2Fc%2Fportal%2Flogin&")

;Sleep(5000)

$oForm =_IEFormGetCollection($oIE, 0)

$Login = _IEFormElementGetObjByName($oForm,"username")

$Pass = _IEFormElementGetObjByName($oForm,"passwordX")

_IEFormElementSetValue($Login,"A0103")

_IEFormElementSetValue($Pass,"99999")

_IEFormSubmit($oForm)

kk_lee69 发表于 2011-11-13 00:25:02

本帖最后由 kk_lee69 于 2014-3-26 15:58 编辑

回复 4# suiyefeng


    試看看感謝!!

還有其他解法嗎??......不太想 開啟IE的畫面.......能直接用POST 的嗎??

網站是公司的.......網址如下.....如果有需要帳號密碼請告知 我可以開個帳號密碼給您測試



我希望是用POST 的方式就是不要開啟網頁的方式處理.....因為些資料我必須要進入網站去做更新

可否請高手幫幫忙

kk_lee69 发表于 2011-11-13 00:30:27

表单没有名称吧这个
#include

$oIE = _IECreate("https://www.XXXX.tw:8443/cas-web/login?service=ht ...
suiyefeng 发表于 2011-11-12 23:38 http://www.autoitx.com/images/common/back.gif

老大還是一樣......連帳號密碼都無法改變....._IEFormElementSetValue 根本無法將值存到表單上

sour 发表于 2011-11-13 09:04:35

你这个是加密能获得我表示存疑

suiyefeng 发表于 2011-11-13 10:53:47

本帖最后由 suiyefeng 于 2011-11-13 12:49 编辑

发现代码又没问题了....我这可以使用#include <IE.au3>

$oIE = _IECreate("https://www.正河源.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.xn--2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin")

$oForm =_IEFormGetCollection($oIE, 0)
$Login = _IEFormElementGetObjByName($oForm,"username")
$Pass = _IEFormElementGetObjByName($oForm,"passwordX")
$Pass1 = _IEFormElementGetObjByName($oForm,"password")

_IEFormElementSetValue($Login,"A0103")
_IEFormElementSetValue($Pass,"99999")
_IEFormElementSetValue($Pass1,"99999")
_IEFormSubmit($oForm)

kk_lee69 发表于 2011-11-13 13:23:38

回复 8# suiyefeng

感謝可以了.....搞不懂的是....我的寫法為何不行?? 看起來差不多咩><.....

另外請教....有沒有 直接POST 的方法...也就是不用開啟IE 的畫面 就可以登入的方法呢??

suiyefeng 发表于 2011-11-13 13:28:41

本帖最后由 suiyefeng 于 2011-11-13 13:36 编辑

post的,,可以试试看$user = "user"
$pwd = "pwd"
$oHTTP = ObjCreate("microsoft.xmlhttp")      
$oHTTP.Open("GET","https://www.xn--2lwy1a54b.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.xn--2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin&",false)
$oHTTP.setRequestHeader("Accept-Language", "zh-cn")
$oHTTP.setRequestHeader("Connection", "Keep-Alive")
$oHTTP.Send()
$data=$oHTTP.responseText
$lt = StringRegExp($data, 'name="lt" value="(.*)"', 3)
If Not IsArray($lt) Then
        Exit
EndIf

$header=$oHTTP.GetAllResponseHeaders
$session = StringRegExp($header, "JSESSIONID=.*?;", 3)
If Not IsArray($lt) Then
        Exit
EndIf      

$post = "username="&$user&"&passwordX="&$pwd&"&password="&$pwd&"&lt="&$lt&"&_eventId=submit"
$cookie = $session&" GUEST_LANGUAGE_ID=zh_TW; COOKIE_SUPPORT=true; CASLoginRememberPassword=true; CASLoginPasswordCheckOk="

$oHTTP = ObjCreate("microsoft.xmlhttp")      
$oHTTP.Open("POST","https://www.xn--2lwy1a54b.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.xn--2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin&",false)
$oHTTP.setRequestHeader("Accept-Language", "zh-cn")
$oHTTP.setRequestHeader("Cache-Control", "no-cache")
$oHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
$oHTTP.setRequestHeader("Referer","https://www.xn--2lwy1a54b.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.xn--2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin&")
$oHTTP.setRequestHeader("Cookie", $cookie)
$oHTTP.Send($post);post关键数据
$data=$oHTTP.responseText
MsgBox(0,0,$data)
FileWrite("11.txt", $data)

suiyefeng 发表于 2011-11-13 13:31:14

回复 9# kk_lee69


    这个页面表单没有name和id属性

kk_lee69 发表于 2011-11-13 14:17:47

本帖最后由 kk_lee69 于 2014-3-26 15:58 编辑

回复 10# suiyefeng

感謝 幫助 我大概懂得POST 的方式了.....不過還有事情 請教.....希望 suiyefeng 兄在教導我一下

因為上面的例子所返回的資料是 https://www.xn--2lwy1a54b.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.xn--2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin
這個 網址的 HTML 語法.......

但是實際上 登入後 ...網站 會轉到 http://www..tw:8081/web/41215/1 這個位置
我需要的是登入後....跑到某個特定的畫面(網址)
http://www..tw:8081/web/41215/1?p_p_id=DscMarquee&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=4&p_p_col_count=5&_DscMarquee_struts_action=%2Fdsc%2Fdscmarquee%2Fedit_marquee&_DscMarquee_redirect=%2Fweb%2F41215%2F1&_DscMarquee_marqueeId=84239

這個位置 去修改 內容跟提交...... 這個部份 不知道 是否能有個思考方向給我呢??

還是 如果您願意的話我開個 測試帳號 給您......是否可以幫我測試看看呢感謝!!

.個朲綉√ 发表于 2011-11-13 15:32:06

本帖最后由 .個朲綉√ 于 2011-11-13 15:37 编辑

10行代码主可以完成post登陆了.

Global $xmlhttp,$para_txt,$lt
$xmlhttp=ObjCreate("Microsoft.XMLHTTP")
$xmlhttp.open("get","http://www.正河源.tw:8081/web/guest/home",False)
$xmlhttp.send()
$para_txt=$xmlhttp.Responsetext
$lt = StringRegExp($para_txt,'(?m)(?<="lt").*?"(\V+)" />',1)
$poststr="username=账号&passwordX=密码&password=密码&lt="&$lt&"&_eventId=submit"
$xmlhttp.open("post","https://www.正河源.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.xn--2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin&",false)
$xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
$xmlhttp.send($poststr)

kk_lee69 发表于 2011-11-13 20:24:31

回复 13# .個朲綉√

好像出現錯誤了我看了一下 好像是$LT 的問題

<html><head><title>JBossWeb/2.0.1.GA - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><p><b>exception</b>

suiyefeng 发表于 2011-11-14 00:27:30

本帖最后由 suiyefeng 于 2011-11-14 00:42 编辑

基本可以用了
#include <WinHttp_GetRespond.au3>

$user = "user"
$pwd = "pwd"
$title = "标题"
$title = UrlEnc($title)
$content = "内容"
$content = UrlEnc($content)

                ;获取网页
                $MyOpen=_WinHttpOpen()
                $rContext=_WinHTTP_GetRespond($MyOpen,"https://www.xn--2lwy1a54b.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.xn--2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin&",4 + 2 + 16,50000)
                If @error Then
                        MsgBox(0,@error,"出错了")
                        Exit
                EndIf
               
                $lt = StringRegExp($rContext, 'name="lt" value="(.*)"', 3)
                If Not IsArray($lt) Then
                        Exit
                EndIf
               
                ;Post提交数据
                $sPost = "username="&$user&"&passwordX="&$pwd&"&password="&$pwd&"&lt="&$lt&"&_eventId=submit"
      $rContext=_WinHTTP_GetRespond($MyOpen,"https://www.xn--2lwy1a54b.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.xn--2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin&",1 + 4 + 2, 50000, $sPost, -1, "Content-Type: application/x-www-form-urlencoded")
      If @error Then
                        MsgBox(0,@error,"出错了")
                        Exit
                EndIf
               
                ;成功跳转
                $location = StringRegExp($rContext, "Location: (.*)\n", 3)
                If Not IsArray($location) Then
                        MsgBox(64, 0, "用户名或密码错误")
                        Exit
                EndIf
               
                $rContext=_WinHTTP_GetRespond($MyOpen, $location, 4 + 2 , 50000)
                If @error Then
                        MsgBox(0,@error,"出错了")
                        Exit
                EndIf
;~                 FileWrite("成功后的网页.txt", $rContext)

                ;获取修改的时候需要的数据
                $queeId = StringRegExp($rContext, '_DscMarquee_marqueeId=(.*)">', 3)
                $userid = StringRegExp($rContext, '\?userid=(.*)&dateTime', 3)
                $web = StringRegExp($rContext, 'href="(.*)" >新品公告', 3)
                ;获得成功后修改....还有日期那些我就不改了
                $sPost = "_DscMarquee_marqueeId="&$queeId&"&_DscMarquee_userId="&$userid&"&_DscMarquee_cmd=update&_DscMarquee_redirect="&$web&"&_DscMarquee_tabs1TabsScroll=&_DscMarquee_title="&$title&"&_DscMarquee_content="&$content&"&_DscMarquee_startDateYear=2011&_DscMarquee_startDateMonth=10&_DscMarquee_startDateDay=13&_DscMarquee_endDateYear=2011&_DscMarquee_endDateMonth=11&_DscMarquee_endDateDay=13"
                $rContext=_WinHTTP_GetRespond($MyOpen,"http://www.xn--2lwy1a54b.tw:8081"&$web&"?p_p_id=DscMarquee&p_p_lifecycle=1&p_p_state=maximized&p_p_mode=view&_DscMarquee_struts_action=%2Fdsc%2Fdscmarquee%2Fedit_marquee",1 + 4 + 2, 50000, $sPost, -1, "Content-Type: application/x-www-form-urlencoded")
      If @error Then
                        MsgBox(0,@error,"出错了")
                        Exit
                EndIf
               
                If StringInStr($rContext, "成功") Then
                        MsgBox(64, 0,"已经更改成功")
                EndIf
               
                FileWrite("5.txt", $rContext)
      _WinHttpCloseHandle($MyOpen)
               
               
Func UrlEnc($Sz_url)
      Local $str=StringTrimLeft(StringToBinary($Sz_url,4),2)
      Local $ret
      For $i=1 to StringLen($str) Step 2
                $ret &='%' & StringMid($str,$i,2)
      Next
      Return $ret
EndFunc
页: [1] 2
查看完整版本: [已解決]IE操作 關於自動登入網站...找不出程式無法執行的原因...求助高手