code refactoring, file name cleanups, added ability to use portable version of chrome to Selenium functions

main
Yuriy 1 year ago
parent 9d250a1c10
commit 621127eaf0

@ -0,0 +1,87 @@
; Notes/Extra Info/#Includes
;------------------------------------------------
; Chrome Related Functions
GetChromeFilepath(){
; ChromeFilepath is global variable
; Establish Variable with Filepath to be used throughout the script
ChromePortableFilepath = %A_ScriptDir%\Lib\chrome-win64\chrome.exe
if(FileExist(ChromePortableFilepath)){
ChromeFilepath := ChromePortableFilepath
}
else {
if(FileExist("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"))
ChromeFilepath = C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
if(FileExist("C:\Program Files\Google\Chrome\Application\chrome.exe"))
ChromeFilepath = C:\Program Files\Google\Chrome\Application\chrome.exe
}
}
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
if(ChromeFilepath = ""){
GetChromeFilepath()
}
GetChromeVersionCommand = powershell (Get-Item '%ChromeFilepath%').VersionInfo.ProductVersion
Chromeversion := RunCMD(GetChromeVersionCommand)
ChromeVersion := StrReplace(ChromeVersion, "`r")[1] ; replace any newline characters that powershell returns
return ChromeVersion
}
GetURLofLatestChromedriver(ChromeVersion){
; https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints
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
}

@ -4,15 +4,6 @@
; -------------------------------Variables------------------------------- ; -------------------------------Variables-------------------------------
; Declare global variables here so they don't have to be declared in each script ; Declare global variables here so they don't have to be declared in each script
global ChromeTabsURLArray
global DriverTitleArray
global LastWebsitePostURL
global ChromeFilepath
global CurrentTabURL
global URLOfLastErrorPage
; #Include %A_ScriptDir%\ChromeAutomationFunctions.ahk
; #Include %A_ScriptDir%\RunCMD.ahk
DevModeMsgBox(Message){ DevModeMsgBox(Message){

@ -1,68 +1,18 @@
; Functions ; Notes/Extra Info/#Includes
;------------------------------------------------ ;------------------------------------------------
; Selenium Related Functions
GetChromeVersion(){ ; Global Variables
; 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 ; Declare global variables here so they don't have to be declared in each script
global ChromeTabsURLArray
command = powershell $(Get-Package -Name 'Google Chrome').Version global DriverTitleArray
ChromeVersion := RunCMD(command) global LastWebsitePostURL
ChromeVersion := StrSplit(ChromeVersion, "`r")[1] ; remove newline character if it exists global CurrentTabURL
return ChromeVersion global URLOfLastErrorPage
}
GetURLofLatestChromedriver(ChromeVersion){
; https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints
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(){ ShowSeleniumErrorMsgbox(){
GetChromeVersionCommand = powershell (Get-Item '%ChromeFilepath%').VersionInfo.ProductVersion
Chromeversion := RunCMD(GetChromeVersionCommand)
ChromeVersion := StrReplace(ChromeVersion, "`n", "")
; Clipboard := ChromeVersion ; Clipboard := ChromeVersion
; Msgbox % "Chromeversion: " Chromeversion ; Msgbox % "Chromeversion: " Chromeversion
@ -544,6 +494,9 @@ SaveDriverURL(){ ; save the url of the result page. That way if a tab is not fou
; -------------------------------SChrome_Get------------------------------- ; -------------------------------SChrome_Get-------------------------------
SChrome_Get(URL := "", Profile := "Profile 1", IP_Port := "127.0.0.1:9222"){ SChrome_Get(URL := "", Profile := "Profile 1", IP_Port := "127.0.0.1:9222"){
Message = Trying to Connect to Chrome
SaveOrPostProgress(Message:=Message,PostType:="Tooltip")
IP_Port_Nr := RegExReplace(IP_Port, ".*:(\d*)", "$1") IP_Port_Nr := RegExReplace(IP_Port, ".*:(\d*)", "$1")
if WinExist("ahk_exe Chrome.exe"){ if WinExist("ahk_exe Chrome.exe"){
WinGet, pid, PID, ahk_exe chrome.exe WinGet, pid, PID, ahk_exe chrome.exe
@ -573,44 +526,26 @@ SChrome_Get(URL := "", Profile := "Profile 1", IP_Port := "127.0.0.1:9222"){
} }
} }
; ; yuriy's settings if(ChromeFilepath = ""){
; IniRead, ChromeFilepath, C:\Users\%A_username%\Documents\Autohotkey\Lib\ScriptSettings.ini, Selenium, %A_Computername%, %A_Space% GetChromeFilepath()
}
; ; Establish Variable with Filepath to be used throughout the script
; if(ChromeFilepath = ""){
if(FileExist("C:\Program Files\Google\Chrome\Application\chrome.exe")){
ChromeFilepath = C:\Program Files\Google\Chrome\Application\chrome.exe
}
else if (FileExist("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe")){
ChromeFilepath = C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
}
if(ChromeFilepath = ""){
Message = Failed to find chrome.exe in the usual locations.
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
MsgBox 0x30, Error!, Unable to find Chrome.exe in the usual locations. `nProgram Exiting.
ExitApp
}
if(!winExist("ahk_exe chrome.exe")){
run, %ChromeFilepath% --remote-debugging-port=%IP_Port_Nr% %URL%
}
Driver := ComObjCreate("Selenium.ChromeDriver")
Driver.SetCapability("debuggerAddress", IP_Port)
try Driver.Start()
catch e {
ShowSeleniumErrorMsgbox() if(!winExist("ahk_exe chrome.exe")){
run, %ChromeFilepath% --remote-debugging-port=%IP_Port_Nr% %URL%
}
} ; end of catch Driver := ComObjCreate("Selenium.ChromeDriver")
Driver.SetCapability("debuggerAddress", IP_Port)
try Driver.Start()
catch e {
ShowSeleniumErrorMsgbox()
} ; end of catch
; Save current chrome version to ini file ; Save current chrome version to ini file
return Driver return Driver
} }
; -------------------------------/SChrome_Get------------------------------- ; -------------------------------/SChrome_Get-------------------------------
/* /*
*/ */
Loading…
Cancel
Save