code refactoring, file name cleanups, added ability to use portable version of chrome to Selenium functions
This commit is contained in:
87
Chrome-Functions.ahk
Normal file
87
Chrome-Functions.ahk
Normal file
@@ -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(!winExist("ahk_exe chrome.exe")){
|
||||||
; if(ChromeFilepath = ""){
|
run, %ChromeFilepath% --remote-debugging-port=%IP_Port_Nr% %URL%
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Driver := ComObjCreate("Selenium.ChromeDriver")
|
||||||
|
Driver.SetCapability("debuggerAddress", IP_Port)
|
||||||
|
try Driver.Start()
|
||||||
|
catch e {
|
||||||
|
ShowSeleniumErrorMsgbox()
|
||||||
|
} ; end of catch
|
||||||
|
|
||||||
if(ChromeFilepath = ""){
|
; Save current chrome version to ini file
|
||||||
Message = Failed to find chrome.exe in the usual locations.
|
return Driver
|
||||||
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")){
|
; -------------------------------/SChrome_Get-------------------------------
|
||||||
run, %ChromeFilepath% --remote-debugging-port=%IP_Port_Nr% %URL%
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
return Driver
|
|
||||||
}
|
|
||||||
|
|
||||||
; -------------------------------/SChrome_Get-------------------------------
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Reference in New Issue
Block a user