From 67117459a568c80a82d9b52345f802b6d40b98d8 Mon Sep 17 00:00:00 2001 From: yuriy Date: Mon, 24 Jul 2023 22:30:42 -0400 Subject: [PATCH] cleanup of libs, initial add of functions for checking chrome version and automatically downloading chromedriver --- General-Shared-Functions.ahk | 25 ++++++++- Selenium-Shared-Functions.ahk | 99 ++++++++++++++++++++++------------- 2 files changed, 87 insertions(+), 37 deletions(-) diff --git a/General-Shared-Functions.ahk b/General-Shared-Functions.ahk index 126fca8..0cba934 100644 --- a/General-Shared-Functions.ahk +++ b/General-Shared-Functions.ahk @@ -419,8 +419,29 @@ SaveCurrentChromeVersionToIniFile(){ } -SaveDriverURLOFErrorPage(){ ; save the url of the result page. That way if a tab is not found for a site, we can open up a tab from this tab instead of middle of nowhere. That way we can keep the tabs together - try URLOfLastErrorPage := driver.URL + +; -------------------------------HasVal------------------------------- +; Function needed for finding a value in an array +HasVal(haystack, needle) +{ + if !(IsObject(haystack)) || (haystack.Length() = 0) + return 0 + for index, value in haystack + if (value = needle) + return index + return 0 +} + + + +HasSubstringVal(haystack, needle) +{ + if !(IsObject(haystack)) || (haystack.Length() = 0) + return 0 + for index, value in haystack + if (InStr(value, Needle)) + return index + return 0 } diff --git a/Selenium-Shared-Functions.ahk b/Selenium-Shared-Functions.ahk index 48254a4..4755891 100644 --- a/Selenium-Shared-Functions.ahk +++ b/Selenium-Shared-Functions.ahk @@ -2,6 +2,61 @@ ;------------------------------------------------ +GetChromeVersion(){ + ; https://stackoverflow.com/questions/52457766/how-can-i-get-google-chromes-version-number + ; Command = powershell `$ChromePath = 'C:\Program Files\Google\Chrome\Application\chrome.exe' `; [System.Diagnostics.FileVersionInfo]::GetVersionInfo($ChromePath).ProductVersion + + command = powershell $(Get-Package -Name 'Google Chrome').Version + ChromeVersion := RunCMD(command) + ChromeVersion := StrSplit(ChromeVersion, "`r")[1] ; remove newline character if it exists + return ChromeVersion +} + +DownloadLatestChromeDriver(ChromeVersion){ + + json_str := urldownloadtovar("https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json") + + ; requires #include of json.ahk in parent script + parsed := JSON.Load(json_str) + + ChromelabsJsonEntriesCount := parsed.versions.count() + + if(ChromelabsJsonEntriesCount = ""){ + return "Failed to parse chromedriver json. " + } + + loop % ChromelabsJsonEntriesCount { + + if(A_index = ChromelabsJsonEntriesCount){ + Message = "Failed to find %ChromeVersion% in the ChromeLabs Json" + return Message + } + + if(ChromeVersion = parsed.versions[A_Index].version){ + + VersionIndex := A_Index + + ; loop through the platforms to get download URL + loop % parsed.versions[VersionIndex].downloads.chromedriver.count() { + + ; 64 bit version + if(parsed.versions[VersionIndex].downloads.chromedriver[A_Index].platform = "win64") + chromedriverDLURL64 := parsed.versions[VersionIndex].downloads.chromedriver[A_Index].url + + ; 32 bit version + if(parsed.versions[VersionIndex].downloads.chromedriver[A_Index].platform = "win32") + chromedriverDLURL32 := parsed.versions[VersionIndex].downloads.chromedriver[A_Index].url + } + break + } + } + + ; Msgbox % "chromedriverDLURL32: " chromedriverDLURL32 + ; Msgbox % "chromedriverDLURL64: " chromedriverDLURL64 + return chromedriverDLURL32 +} + + ShowSeleniumErrorMsgbox(){ GetChromeVersionCommand = powershell (Get-Item '%ChromeFilepath%').VersionInfo.ProductVersion @@ -35,10 +90,6 @@ ShowSeleniumErrorMsgbox(){ } - - - - /* */ @@ -481,6 +532,8 @@ CheckURLForSubstring(Substring){ ; End of Function ; -------------------------------/NavigateFromBaseURL------------------------------- + +; -------------------------------SaveDriverURL------------------------------- SaveDriverURL(){ ; save the url of the result page. That way if a tab is not found for a site, we can open up a tab from this tab instead of middle of nowhere. That way we can keep the tabs together try LastWebsitePostURL := driver.URL @@ -561,37 +614,6 @@ SChrome_Get(URL := "", Profile := "Profile 1", IP_Port := "127.0.0.1:9222"){ */ -; -------------------------------HasVal------------------------------- -; Function needed for finding a value in an array -HasVal(haystack, needle) -{ - if !(IsObject(haystack)) || (haystack.Length() = 0) - return 0 - for index, value in haystack - if (value = needle) - return index - return 0 -} -; -------------------------------/HasVal------------------------------- - -HasSubstringVal(haystack, needle) -{ - if !(IsObject(haystack)) || (haystack.Length() = 0) - return 0 - for index, value in haystack - if (InStr(value, Needle)) - return index - return 0 -} - -; SubStr(String, StartingPos [, Length]) - -; InStr(value, Needle) - -/* -*/ - - ; Various functions used to control Selenium, Chrome and Chrome.AHK ;---Javascript--- ;------------------------------------------------ @@ -823,6 +845,11 @@ Selenium_LoopToClearXpath(Xpath,NumOfLoops:=1,SleepLength:=1000){ } } +SaveDriverURLOFErrorPage(){ ; save the url of the result page. That way if a tab is not found for a site, we can open up a tab from this tab instead of middle of nowhere. That way we can keep the tabs together + try URLOfLastErrorPage := driver.URL +} + + ;---\Selenium--- ;------------------------------------------------ @@ -961,3 +988,5 @@ OnMsgBoxJSReturnData() { ControlSetText Button3, Return } } + +