找回密码
 加入
搜索
查看: 4903|回复: 13

[IE类操作] .do結尾的jsp网页,求指示(论坛里有一个帖子但是看不懂)[已解決]

  [复制链接]
发表于 2011-8-19 02:30:07 | 显示全部楼层 |阅读模式
本帖最后由 jack2684 于 2011-8-19 10:11 编辑

我的必须是先进入一个html页面,填表,登陆,然后就转到一个.do结尾的网页,而且地址一直不变。
试着获取网页的各种信息发现都没用啊。。。各种标签、各种查找都不行

在论坛搜索里面找到了一个~!
查了查是jsp网页 ,可是我没有头绪怎么怎麼獲取元素

哪位高手能簡單指點一下,給幾個關鍵字也好~或者給個簡單的實例^^

(嗯,這就是我那個網站的html,其中最後一行高亮是我想點擊的,總之,我自己能看到html代碼可是au3讀不到。。。)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-8-19 02:55:19 | 显示全部楼层
本帖最后由 风行者 于 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
 楼主| 发表于 2011-8-19 03:02:06 | 显示全部楼层
後來又照了照資料,又覺得可能是frame的問題??我那個網頁確實是好幾個框架的。
--------------------------
樓上的代碼貌似很犀利= =.但是有些地方沒看明白,比如參數“s_linkTitle”爲什麽一直沒有在函數裏面出現??既然如此這個參數還有用嗎?
发表于 2011-8-19 03:06:45 | 显示全部楼层
是 $s_linktext ,写错了,上面已更正
发表于 2011-8-19 03:09:22 | 显示全部楼层
本帖最后由 风行者 于 2011-8-19 03:17 编辑

那是因为你没包含ie.au3吧
还有些检测也可以去掉,2楼更正
 楼主| 发表于 2011-8-19 03:09:27 | 显示全部楼层
回复 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 完成:[CODE]:1
+>03:08:28 ACNWrapper 完成..
>退出代码: 0    时间: 3.515
 楼主| 发表于 2011-8-19 03:10:35 | 显示全部楼层
回复 4# 风行者

啊!不對,頭文件沒放對。。。我再試試~!
 楼主| 发表于 2011-8-19 03:17:05 | 显示全部楼层
回复 4# 风行者


    嗯,依然彈出了:
--> IE.au3 V2.4-0 Warning from function _IELinkClickByText, $_IEStatus_NoMatch
我覺得那個函數沒問題,而是代碼執行太快了,頁面還沒載入完畢,呵呵,在查資料中!謝謝“風行者”啦!
 楼主| 发表于 2011-8-19 03:21:23 | 显示全部楼层
本帖最后由 jack2684 于 2011-8-19 03:23 编辑

回复 8# jack2684


我在那個函數之前加了個_IELoadWait ($oIE)依然還是顯示錯誤。。。

仔細觀察了下運行的output,總感覺網頁還沒載入完就冒出錯誤。。。不知為何_IELoadWait沒用
发表于 2011-8-19 04:12:03 | 显示全部楼层
网址是多少,代码也放出看看
 楼主| 发表于 2011-8-19 09:21:16 | 显示全部楼层
本帖最后由 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 完成[CODE]: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 完成:[CODE]:0
+>09:26:32 ACNWrapper 完成..
>退出代码: 0    时间: 12.579

沒看明白warning到底在警告什麽
-------------------------------------
ps:
    那個網站是教務網站啦~urp教務系統,有幾個學校在用它,必須得有學號密碼...
    我用chrome無法登陸,用舊版本chrome登陸也有問題,只能用ie來看源代碼。
    可是用ie看的時候發現點擊的地方不同,代碼也不一樣。後來才知道這是用了好幾個框架的。一開始懷疑是框架的緣故所以不能讀取標籤。現在覺得“風行者”的代碼應該沒問題,就是加載時機不知怎麼搞
 楼主| 发表于 2011-8-19 10:10:00 | 显示全部楼层
本帖最后由 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了而是要用那個框架對象!!
发表于 2011-8-19 11:30:40 | 显示全部楼层
发表于 2011-8-20 00:11:56 | 显示全部楼层
奉献个例子,便于理解。

#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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-18 09:32 , Processed in 0.101000 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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