Chrome.ahk Getting stuck on Evaluate() in a loop

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
Penguin
Posts: 94
Joined: 26 Feb 2016, 16:02

Chrome.ahk Getting stuck on Evaluate() in a loop

24 Jun 2021, 15:03

Hi all,
I'm running into some trouble reading a table with Chrome.ahk in a loop. It seems to randomly stop in the loop and different spots and never get through the entire loop. I have a function that is writing to a txt file and the code stops at PageInstance.Evaluate(some Java Script).value. I see the log file write the retrieving message, but not the retrieved message. The loop does not continue and no errors are thrown.

Any help would be great

Here's my code

Code: Select all

getJobNumberURLs(iframeRef) {
	iframeRef := "document.getElementsByClassName('isView reportsReportBuilder')[0].contentWindow."
	sleep, 5000
	PageInstance := Chrome.GetPageByTitle("Parse Report", "StartsWith")

	js := iframeRef "document.getElementsByClassName('data-grid-table data-grid-full-table')[0].rows.length"
	rowCount := PageInstance.Evaluate(js).value
	PageInstance.Disconnect()

	loopCount := rowCount -2
	loop %loopCount%
	{
		PageInstance := Chrome.GetPageByTitle("Parse Report", "StartsWith")
		PageInstance.WaitForLoad()
		PageInstance.Call("Console.enable")
		
		if (!IsObject(PageInstance)) {
		  MsgBox Not A Page Object
		}
		
		progressBarPercent := A_Index * (100 / loopCount)
        Progress, %progressBarPercent%, File Wait Status , %A_Index%  of  %loopCount%, File Wait
		sleep 1000

		jobNumberJS := iframeRef "document.getElementsByClassName('data-grid-table data-grid-full-table')[0].rows[" A_Index "].cells[1].innerText"
		
		WriteToLogFile("Retrieving Job Number " A_Index)
		jobNumber := PageInstance.Evaluate(jobNumberJS).value
		if (StrLen(jobNumber) < 1) {
			MsgBox Failure 1
		}
		WriteToLogFile("Retrieved Job Number " A_Index)
		
		jobNumberLinkJS := iframeRef "document.getElementsByClassName('data-grid-table data-grid-full-table')[0].rows[" A_Index "].cells[1].querySelector('a').href"
		WriteToLogFile("Retrieving Job Link " A_Index)
		jobNumberLink := PageInstance.Evaluate(jobNumberLinkJS).value
		if (StrLen(jobNumberLink) < 1) {
			MsgBox Failure 2
		}
		WriteToLogFile("Retrieved Job Link " A_Index)
		
		taskNumberJS := iframeRef "document.getElementsByClassName('data-grid-table data-grid-full-table')[0].rows[" A_Index "].cells[2].innerText"
		WriteToLogFile("Retrieving Task Number " A_Index)
		taskNumber := PageInstance.Evaluate(taskNumberJS).value
		if (StrLen(taskNumber) < 1) {
			MsgBox Failure 3
		}
		WriteToLogFile("Retrieved Task Number " A_Index)
		
		taskNumberLinkJS := iframeRef "document.getElementsByClassName('data-grid-table data-grid-full-table')[0].rows[" A_Index "].cells[2].querySelector('a').href"
		WriteToLogFile("Retrieving Task Link " A_Index)
		taskNumberLink := PageInstance.Evaluate(taskNumberLinkJS).value
		if (StrLen(taskNumberLink) < 1) {
			MsgBox Failure 4
		}
		
		typeJS := iframeRef "document.getElementsByClassName('data-grid-table data-grid-full-table')[0].rows[" A_Index "].cells[7].innerText"
		WriteToLogFile("Retrieving Job Type " A_Index)
		jobType := PageInstance.Evaluate(typeJS).value
		if (StrLen(jobType) < 1) {
			MsgBox Failure 5
		}
		WriteToLogFile("Retrieved Job Type " A_Index)
		
		jobNumberLink := StrReplace(jobNumberLink, ".", "`.")
		taskNumberLink :=  StrReplace(taskNumberLink, ".", "`.")
		jobEntry := jobNumber ", " jobNumberLink ", " taskNumber ", " taskNumberLink ", " jobType
		FileAppend, %jobEntry% `n, C:\Users\parse\Desktop\ParsingFiles\Jobs.csv
		
		PageInstance.Disconnect()
	}

	return
}
[Mod edit: [code][/code] tags added.]
Last edited by gregster on 25 Jun 2021, 04:30, edited 1 time in total.
Reason: Please use [code] tags. Thank you!
Penguin
Posts: 94
Joined: 26 Feb 2016, 16:02

Re: Chrome.ahk Getting stuck on Evaluate() in a loop

24 Jun 2021, 15:44

I will add it seems to happen once we get about 6 in our loop
pommoq
Posts: 1
Joined: 23 Aug 2022, 02:07

Re: Chrome.ahk Getting stuck on Evaluate() in a loop

19 Oct 2022, 04:37

try this
it work for me

in chrome.ahk version 1.2

line 227
Call(DomainAndMethod, Params:="", WaitForResponse:=True)
{
....
....
; Wait for the response
this.responses[ID] := False
i:=0
while (!this.responses[ID]) {
if(i>100){
this.ws.Send(Chrome.Jxon_Dump({"id": ID
, "params": Params ? Params : {}
, "method": DomainAndMethod}))
i:=0
}

Sleep, 50
i++
}

....
....
}

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: filipemb, NinjoOnline and 272 guests