找回密码
 加入
搜索
查看: 13402|回复: 15

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

  [复制链接]
发表于 2011-11-12 18:43:07 | 显示全部楼层 |阅读模式
本帖最后由 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)


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

哪裡出錯呢   可不可以請 高手幫忙一下
发表于 2011-11-12 20:57:52 | 显示全部楼层
看到论坛里有现成的登陆代码,那时也试过,可以用..
只是忘记标题了...sorry
发表于 2011-11-12 21:57:42 | 显示全部楼层
IE操作不是很懂,无能为力,sorry,楼下高手来
发表于 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)
 楼主| 发表于 2011-11-13 00:25:02 | 显示全部楼层
本帖最后由 kk_lee69 于 2014-3-26 15:58 编辑

回复 4# suiyefeng


    試看看  感謝!!

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

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



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

可否請高手幫幫忙
 楼主| 发表于 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


老大  還是一樣......連帳號密碼都無法改變....._IEFormElementSetValue 根本無法將值存到表單上
发表于 2011-11-13 09:04:35 | 显示全部楼层
你这个是加密能获得我表示存疑
发表于 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)
 楼主| 发表于 2011-11-13 13:23:38 | 显示全部楼层
回复 8# suiyefeng

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

另外請教....有沒有 直接POST 的方法...也就是不用開啟IE 的畫面 就可以登入的方法呢??
发表于 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[0]&"&_eventId=submit"
$cookie = $session[0]&" 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)
发表于 2011-11-13 13:31:14 | 显示全部楼层
回复 9# kk_lee69


    这个页面表单没有name和id属性
 楼主| 发表于 2011-11-13 14:17:47 | 显示全部楼层
本帖最后由 kk_lee69 于 2014-3-26 15:58 编辑

回复 10# suiyefeng

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

因為上面的例子  所返回的資料是 https://www.xn--2lwy1a54b.tw:844 ... Fc%2Fportal%2Flogin
這個 網址的 HTML 語法.......

但是實際上 登入後 ...網站 會轉到 http://www..tw:8081/web/41215/1 這個位置
我需要的是登入後....跑到某個特定的畫面(網址)
http://www..tw:8081/web/41215/1? ... uee_marqueeId=84239

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

還是 如果您願意的話  我開個 測試帳號 給您......是否可以幫我測試看看呢  感謝!!
发表于 2011-11-13 15:32:06 | 显示全部楼层
本帖最后由 .個朲綉√ 于 2011-11-13 15:37 编辑

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

Global $xmlhttp,$para_txt,$lt[3]
$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[0]&"&_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)
 楼主| 发表于 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>
发表于 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[0], 'name="lt" value="(.*)"', 3)
                If Not IsArray($lt) Then
                        Exit
                EndIf
                
                ;Post提交数据
                $sPost = "username="&$user&"&passwordX="&$pwd&"&password="&$pwd&"<="&$lt[0]&"&_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[6], "Location: (.*)\n", 3)
                If Not IsArray($location) Then
                        MsgBox(64, 0, "用户名或密码错误")
                        Exit
                EndIf
                
                $rContext=_WinHTTP_GetRespond($MyOpen, $location[0], 4 + 2 , 50000)
                If @error Then 
                        MsgBox(0,@error,"出错了")
                        Exit
                EndIf
;~                 FileWrite("成功后的网页.txt", $rContext[0])

                ;获取修改的时候需要的数据
                $queeId = StringRegExp($rContext[0], '_DscMarquee_marqueeId=(.*)">', 3)
                $userid = StringRegExp($rContext[0], '\?userid=(.*)&dateTime', 3)
                $web = StringRegExp($rContext[0], 'href="(.*)" >新品公告', 3)
                ;获得成功后修改....还有日期那些我就不改了
                $sPost = "_DscMarquee_marqueeId="&$queeId[0]&"&_DscMarquee_userId="&$userid[0]&"&_DscMarquee_cmd=update&_DscMarquee_redirect="&$web[0]&"&_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[0]&"?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[0], "成功") Then
                        MsgBox(64, 0,"已经更改成功")
                EndIf
                
                FileWrite("5.txt", $rContext[0])
        _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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-24 10:06 , Processed in 0.084543 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表