Jury Posted June 25, 2012 Posted June 25, 2012 A search of a web page can retrieve 1 to 20 (or more) links split into 20 per page I can go on to the second page by using: If $x = 20 Then Sleep(2000) ;two seconds $oNext = _IEGetObjById($oIE, "pager1") _IEAction($oNext, "click") _IELoadWait($oIE) where $x is the count of links on the previous page but how do I get to the next page given the next page object is in javascript as seen here: <a id="pager1" href="javascript:__doPostBack('pager1','2')">2</a> - <a id="pager1" href="javascript:__doPostBack('pager1','3')">3</a> - <a id="pager1" href="javascript:__doPostBack('pager1','4')">4</a> - <a id="pager1" href="javascript:__doPostBack('pager1','5')">5</a> <a id="pager1" href="javascript:__doPostBack('pager1','2')">Next ></a> is there a way of sending the doPostBack('pager1','3') information? BTW I just thought (I.m not at my own PC) can I get IEGetObjById by index so somthing like that?
Jury Posted June 27, 2012 Author Posted June 27, 2012 (edited) Looks like this isn't doable within the confines of Autoit - below is what I've ended up with. I'm curious though if the javascript had been given different id like pager1, pager2, pager3... or been given name="pager1" so I could have used index would it have worked? Oh and I know this only works on some PC & IE combinations - I only have the one PC. expandcollapse popup#include <IE.au3> #include <Array.au3> #include <Date.au3> Global $getdate[1] $file = FileOpen(@MyDocumentsDir & "AIT_count.txt", 2) If $file = -1 Then MsgBox(0, "Error", "Unable to open file: " & "C:Documents and Settingsjoe.uryMy DocumentsAutoIt_codegetterprocessingAIT_count.txt") Exit EndIf ;get working days in date range ;yyyy/mm/dd $daysearch = HowManyWorkDays("2003/05/21", "2003/05/23") ;2003/07/01 MsgBox(0, "Number of Weekdays", "There are " & $daysearch & " weekdays between the given dates") For $i = 1 To $daysearch ;open and fill in the search form $oIE = _IECreate("www.ait.gov.uk/Public/Searchunreported.aspx") $oForm = _IEGetObjByName($oIE, "Form1") _IEAction($oForm, "focus") $oQuery = _IEFormElementGetObjByName($oForm, "txtDate") _IEFormElementSetValue($oQuery, $getdate[$i] & @CRLF) _IEFormElementCheckBoxSelect($oForm, 0, "", 1, "byIndex") Sleep(2000) $oNext = _IEGetObjById($oIE, "cmdSearch") _IEAction($oNext, "click") _IELoadWait($oIE) ;grab results into memory $filewhole = _IEDocReadHTML($oIE) ;get required links for page 1 $oLinks = _IELinkGetCollection($oIE) $iNumLinks = @extended For $oLink In $oLinks If StringInStr($oLink.href, ".doc") Then ;ConsoleWrite($oLink.href & @CRLF) FileWrite($file, $oLink.href & " " & $getdate[$i] & @CRLF) EndIf Next Sleep(2000) ;get page 2 if exists (the problem exists here because they've only given an Id (no name) ;and they've used the same Id to every instance of a new page. If StringRegExp($filewhole, "('pager1','2')", 0) Then $oNext = _IEGetObjById($oIE, "pager1") _IEAction($oNext, "click") _IELoadWait($oIE) EndIf ;get required links for page 2 $oLinks = _IELinkGetCollection($oIE) $iNumLinks = @extended For $oLink In $oLinks If StringInStr($oLink.href, ".doc") Then ;ConsoleWrite($oLink.href & @CRLF) FileWrite($file, $oLink.href & " " & $getdate[$i] & @CRLF) EndIf Next ;guess I'll have to go to each date page over 2 long and do it manually so I'll get that information: If StringRegExp($filewhole, "('pager1','9')", 0) Then FileWrite($file, $getdate[$i] & " has 9 pages" & @CRLF) ElseIf StringRegExp($filewhole, "('pager1','8')", 0) Then FileWrite($file, $getdate[$i] & " has 8 pages" & @CRLF) ElseIf StringRegExp($filewhole, "('pager1','7')", 0) Then FileWrite($file, $getdate[$i] & " has 7 pages" & @CRLF) ElseIf StringRegExp($filewhole, "('pager1','6')", 0) Then FileWrite($file, $getdate[$i] & " has 6 pages" & @CRLF) ElseIf StringRegExp($filewhole, "('pager1','5')", 0) Then FileWrite($file, $getdate[$i] & " has 5 pages" & @CRLF) ElseIf StringRegExp($filewhole, "('pager1','4')", 0) Then FileWrite($file, $getdate[$i] & " has 4 pages" & @CRLF) ElseIf StringRegExp($filewhole, "('pager1','3')", 0) Then FileWrite($file, $getdate[$i] & " has 3 pages" & @CRLF) EndIf Sleep(2000) _IEQuit($oIE) Next FileClose($file) ;what a good function this is! Func HowManyWorkDays($sStartDate, $sEndDate) Dim $MyDate Dim $MyTime $myStartDate = $sStartDate $myEndDate = $sEndDate $countWeekDay = 0 $CountDays = _DateDiff("d", $myStartDate, $myEndDate) For $inc = 0 To $CountDays $TempDate = _DateAdd('D', $inc, $myStartDate) _DateTimeSplit($TempDate, $MyDate, $MyTime) $FileYear = $MyDate[1] If $MyDate[2] < 10 Then $FileMonth = "0" & $MyDate[2] Else $FileMonth = $MyDate[2] EndIf If $MyDate[3] < 10 Then $FileDay = "0" & $MyDate[3] Else $FileDay = $MyDate[3] EndIf ;Returns Day of the Week Range is 1 to 7 where 1=Sunday $iWeekday = _DateToDayOfWeek($FileYear, $FileMonth, $FileDay) If $iWeekday > 1 And $iWeekday < 7 Then If StringLen($FileDay) = 2 Then _ArrayAdd($getdate, $FileDay & '-' & $FileMonth & '-' & $FileYear) EndIf $countWeekDay = $countWeekDay + 1 EndIf Next Return $countWeekDay EndFunc ;==>HowManyWorkDays Edited June 27, 2012 by Jury
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now