.do結尾的jsp网页,求指示(论坛里有一个帖子但是看不懂)[已解決]
本帖最后由 jack2684 于 2011-8-19 10:11 编辑我的必须是先进入一个html页面,填表,登陆,然后就转到一个.do结尾的网页,而且地址一直不变。
试着获取网页的各种信息发现都没用啊。。。各种标签、各种查找都不行
在论坛搜索里面找到了一个~!
查了查是jsp网页 ,可是我没有头绪怎么怎麼獲取元素
哪位高手能簡單指點一下,給幾個關鍵字也好~或者給個簡單的實例^^
(嗯,這就是我那個網站的html,其中最後一行高亮是我想點擊的,總之,我自己能看到html代碼可是au3讀不到。。。)
本帖最后由 风行者 于 2011-8-19 03:08 编辑
#include <IE.au3>
_IELinkClickByTitle($oIE, "留意信息")
Func _IELinkClickByTitle(ByRef $o_object, $s_linktext, $i_index = 0, $f_wait = 1)
Local $found = 0, $linktext, $links = $o_object.document.links
$i_index = Number($i_index)
For $link In $links
$linktext = $link.Title & ""
If $linktext = $s_linkText Then
If ($found = $i_index) Then
$link.click
If $f_wait Then
_IELoadWait($o_object)
Return SetError(@error, 0, -1)
EndIf
Return SetError($_IEStatus_Success, 0, -1)
EndIf
$found = $found + 1
EndIf
Next
Return SetError($_IEStatus_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both
EndFunc ;==>_IELinkClickByTitle 後來又照了照資料,又覺得可能是frame的問題??我那個網頁確實是好幾個框架的。
--------------------------
樓上的代碼貌似很犀利= =.但是有些地方沒看明白,比如參數“s_linkTitle”爲什麽一直沒有在函數裏面出現??既然如此這個參數還有用嗎? 是 $s_linktext ,写错了,上面已更正 本帖最后由 风行者 于 2011-8-19 03:17 编辑
那是因为你没包含ie.au3吧
还有些检测也可以去掉,2楼更正 回复 4# 风行者
嗯,我更正了,然後出現一些warning:>"C:\Program Files\autoit3\SciTe\ACNWrapper\ACNWrapper.exe" /run /ErrorStdOut /in "C:\Users\jv12\Desktop\AU3\測試代碼\bdtupian.au3" /autoit3dir "C:\Program Files\autoit3" /UserParams
+>03:08:25 开始执行 ACNWrapper v.1.0.0.12
+> ============================================
+>执行环境:
+> CPU构架: X64
+> 系统构架: X86
+> 系统语言: 0804
+> 键盘布局: 00000804
+> IP地址: 118.229.164.199
+> 内存总量: 1972MB
+> 内存剩余: 330MB
+> 操作系统: WIN_7
+> AU3版本: 3.3.6.1
+> ============================================
>运行 AU3Check (1.54.19.0)开始目录:C:\Program Files\autoit3
C:\Users\jv12\Desktop\AU3\測試代碼\bdtupian.au3(5,59) : WARNING: $_IEStatus_InvalidDataType: 使用前并未进行声明.
Return SetError($_IEStatus_InvalidDataType,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\jv12\Desktop\AU3\測試代碼\bdtupian.au3(19,67) : WARNING: $_IEStatus_Success: 使用前并未进行声明.
Return SetError($_IEStatus_Success,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\jv12\Desktop\AU3\測試代碼\bdtupian.au3(25,43) : WARNING: $_IEStatus_NoMatch: 使用前并未进行声明.
Return SetError($_IEStatus_NoMatch,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\jv12\Desktop\AU3\測試代碼\bdtupian.au3 - 0 error(s), 3 warning(s)
Return SetError(->03:08:26 AU3Check 完成::1
+>03:08:28 ACNWrapper 完成..
>退出代码: 0 时间: 3.515
回复 4# 风行者
啊!不對,頭文件沒放對。。。我再試試~! 回复 4# 风行者
嗯,依然彈出了:
--> IE.au3 V2.4-0 Warning from function _IELinkClickByText, $_IEStatus_NoMatch
我覺得那個函數沒問題,而是代碼執行太快了,頁面還沒載入完畢,呵呵,在查資料中!謝謝“風行者”啦! 本帖最后由 jack2684 于 2011-8-19 03:23 编辑
回复 8# jack2684
我在那個函數之前加了個_IELoadWait ($oIE)依然還是顯示錯誤。。。
仔細觀察了下運行的output,總感覺網頁還沒載入完就冒出錯誤。。。不知為何_IELoadWait沒用 网址是多少,代码也放出看看 本帖最后由 jack2684 于 2011-8-19 09:27 编辑
回复 10# 风行者
我在第9行下面插了個MsgBox(0,"links",$links)來觀察,發現確實是因為網頁還沒加載完就彈出信息了。
看來就是這個加載的問題了!_!
<補充:>
我後來又加了個sleep保證加載,運行結果如下:
>运行 AU3Check (1.54.19.0)开始目录:C:\Program Files\autoit3
+>09:26:21 AU3Check 完成:0
>运行:(3.3.6.1):C:\Program Files\autoit3\autoit3.exe "C:\Users\jv12\Desktop\AU3\測試代碼\bdtupian.au3"
--> IE.au3 V2.4-0 Warning from function _IELinkClickByText, $_IEStatus_NoMatch
+>09:26:31 AutoIT3.exe 完成::0
+>09:26:32 ACNWrapper 完成..
>退出代码: 0 时间: 12.579
沒看明白warning到底在警告什麽
-------------------------------------
ps:
那個網站是教務網站啦~urp教務系統,有幾個學校在用它,必須得有學號密碼...
我用chrome無法登陸,用舊版本chrome登陸也有問題,只能用ie來看源代碼。
可是用ie看的時候發現點擊的地方不同,代碼也不一樣。後來才知道這是用了好幾個框架的。一開始懷疑是框架的緣故所以不能讀取標籤。現在覺得“風行者”的代碼應該沒問題,就是加載時機不知怎麼搞 本帖最后由 jack2684 于 2011-8-19 10:14 编辑
解決了!
只需要只需要獲取框架對象,就可以了^^;开始登陆
$oIE=_IECreate("http://byjw.bupt.edu.cn:8080/",0,1,1,-1)
$username=_IEGetObjByName($oIE,"zjh")
$passwd=_IEGetObjByName($oIE,"mm")
_IEDocInsertText($username,"xxxxxx")
_IEDocInsertText($passwd,"xxxxxx")
$oLoginBtn=_IEGetObjById($oIE,"btnSure");
_IEAction($oLoginBtn,"click")
;登陆之後
$oFrame=_IEFrameGetObjByName($oIE,"topFrame");就是加了這一行!!!
_IELinkClickByTitle($oFrame,"個人信息");這裡的瀏覽器對象不能用$oIE了而是要用那個框架對象!! {:face (197):} 奉献个例子,便于理解。
#include <ie.au3>
$oIE=_IECreate("http://www.hao123.com",1 ,1,1,-1)
;~ Sleep(10000)
_IELinkClickByTitle($oIE, '把hao123设为主页')
Func _IELinkClickByTitle(ByRef $o_object, $s_linktext, $i_index = 0, $f_wait = 1)
Local $found = 0, $linktext, $links = $o_object.document.links
$i_index = Number($i_index)
For $link In $links
$linktext = $link.Title & ""
;~ MsgBox(0, '', $linktext)
;~ ContinueLoop
If $linktext = $s_linkText Then
If ($found = $i_index) Then
$link.click
If $f_wait Then
_IELoadWait($o_object)
Return SetError(@error, 0, -1)
EndIf
Return SetError($_IEStatus_Success, 0, -1)
EndIf
$found = $found + 1
EndIf
Next
Return SetError($_IEStatus_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both
EndFunc ;==>_IELinkClickByTitle
页:
[1]