[已解決]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)
看樣子 上面的語法應該不會錯的丫但是 真的就是連輸入 帳號 密碼都無法
哪裡出錯呢 可不可以請 高手幫忙一下 看到论坛里有现成的登陆代码,那时也试过,可以用..
只是忘记标题了...sorry IE操作不是很懂,无能为力,sorry,楼下高手来 表单没有名称吧这个
#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 于 2014-3-26 15:58 编辑
回复 4# suiyefeng
試看看感謝!!
還有其他解法嗎??......不太想 開啟IE的畫面.......能直接用POST 的嗎??
網站是公司的.......網址如下.....如果有需要帳號密碼請告知 我可以開個帳號密碼給您測試
我希望是用POST 的方式就是不要開啟網頁的方式處理.....因為些資料我必須要進入網站去做更新
可否請高手幫幫忙 表单没有名称吧这个
#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 根本無法將值存到表單上 你这个是加密能获得我表示存疑 本帖最后由 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) 回复 8# suiyefeng
感謝可以了.....搞不懂的是....我的寫法為何不行?? 看起來差不多咩><.....
另外請教....有沒有 直接POST 的方法...也就是不用開啟IE 的畫面 就可以登入的方法呢?? 本帖最后由 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&"&_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) 回复 9# kk_lee69
这个页面表单没有name和id属性 本帖最后由 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: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&"&_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)
回复 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: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&"&_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