; Notes/Extra Info/#Includes ;------------------------------------------------ ; Chrome Global Variables ;------------------------------------------------ ; Chrome/Selenium global ChromeFilepath ; Declare global variables here so they don't have to be declared in each script global ChromeTabsURLArray global DriverTitleArray global LastWebsitePostURL global CurrentTabURL global URLOfLastErrorPage global chromeDLURL64 global chromedriverDLURL64 global InstalledChromeVersion ; Chrome Related Functions ;------------------------------------------------ DownloadLatestChromium(){ if(ChromeFilepath = "") ChromeFilepath := GetInstalledChromeFilepath() if(chromedriverDLURL64 ="" or chromeDLURL64 = ""){ ChromeStableLatestVersion := GetLatestChromeStableVersion() GetDownloadURLOfChromeAndDriver(ChromeStableLatestVersion) } ; Msgbox % "chromedriverDLURL64: " chromedriverDLURL64 ; Msgbox % "chromeDLURL64: " chromeDLURL64 ParentFolder = %A_ScriptDir%\Lib\Downloads ChromeDriverDownloadZipFilepath = %ParentFolder%\chromedriver-win64.zip ChromeDriverDownloadFilepath = %ParentFolder%\chromedriver-win64 ChromeDriverTemporaryExeFilepath = %ParentFolder%\chromedriver-win64\chromedriver-win64\chromedriver.exe ChromeDownloadZipFilepath = %ParentFolder%\chrome-win64.zip ChromeDownloadFilepath = %A_ScriptDir%\Lib\chrome-win64 ChromeDriverMoverEXEFilepath = %A_ScriptDir%\Lib\Chromedriver-Mover.exe ChromeDriverMoverURL = https://git.freedomainplaylists.com/yuriy/Chromedriver-Mover/releases/download/1.0/Chromedriver-Mover.exe ChromeDriverProgramFilesExeFilepath = C:\Program Files\SeleniumBasic\chromedriver.exe ManualMoveChromedriverMessage =Please manually copy chromedriver.exe from:`n`n%ChromeDriverDownloadFilepath%`n`nTo:`n`nC:\Program Files\SeleniumBasic\chromedriver.exe /* With URLDownloadToFile you don't need to delete pre-existing files, as they get overwriten when a new file is downloaded. FileRemoveDir, %ParentFolder%, 1 if(ErrorLevel){ Message = Failed to download Parent Download Folder. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") } if(!FileExist(ParentFolder)){ ; msgbox, creating dir FileCreateDir, %ParentFolder% } Msgbox % "ParentFolder: " ParentFolder msgbox % FileExist(ParentFolder) if(!FileExist(ParentFolder)){ msgbox, creating dir FileCreateDir, %ParentFolder% } FileDelete, %ChromeDriverDownloadZipFilepath% if(ErrorLevel) msgbox, failed to delete %ChromeDriverDownloadZipFilepath% FileRemoveDir, %ChromeDownloadZipFilepath%, 1 if(ErrorLevel) msgbox, failed to delete %ChromeDownloadZipFilepath% FileRemoveDir, %ChromeDriverDownloadFilepath%, 1 msgbox, failed to delete %ChromeDriverDownloadFilepath% FileRemoveDir, %ChromeDownloadFilepath%, 1 */ if(!FileExist(ParentFolder)){ ; msgbox, creating dir FileCreateDir, %ParentFolder% } FileGetTime, ChromeDriverExeOldCreationTime, %ChromeDriverProgramFilesExeFilepath%, C Message = Downloading Chromedriver v%ChromeStableLatestVersion% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") UrlDownloadToFile, %chromedriverDLURL64%, %ChromeDriverDownloadZipFilepath% Message = Downloading Chromium v%ChromeStableLatestVersion% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") UrlDownloadToFile, %chromeDLURL64%, %ChromeDownloadZipFilepath% ; delete the pre-existing chrome-win64 directory Message = Deleting Old Chromium Directory SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") FileRemoveDir, %ChromeDownloadFilepath%, 1 if(FileExist(ChromeDownloadFilepath)){ Message = Failed to delete the old Chromium. `nPlease manually delete the following directory and then run the Chrome Update again.`n`n %ChromeDownloadFilepath% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar") ToolTip return } Message = Extracting Chromedriver v%ChromeStableLatestVersion% Zip file SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") Unzip(ChromeDriverDownloadZipFilepath, ChromeDriverDownloadFilepath) Message = Extracting Chromium v%ChromeStableLatestVersion% Zip file SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") Unzip(ChromeDownloadZipFilepath, ChromeDownloadFilepath) ; Check if the Copy-ChromeDriver-To-Program-Files.exe file exists Message = Checking Chromedriver-Mover.exe exists SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") if(!FileExist(ChromeDriverMoverEXEFilepath)){ Message = Chromedriver-Mover not found. Downloading from Gitea SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") UrlDownloadToFile, %ChromeDriverMoverURL%, %ChromeDriverMoverEXEFilepath% if(ErrorLevel){ Message = Failed to download the Copy-ChromeDriver-To-Program-Files.exe executable. `n`n%ManualMoveChromedriverMessage% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") ToolTip Return } } if(!FileExist(ChromeDriverMoverEXEFilepath)){ Message = ChromeDriver-Mover not found after downloading. `nPossibly triggered and deleted by Antivirus?`n`n%ManualMoveChromedriverMessage% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging,msgbox") ToolTip return } Message = Starting up Chromedriver-Mover SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") ; Msgbox % "ChromeDriverMoverEXEFilepath: " ChromeDriverMoverEXEFilepath ; Msgbox % "ChromeDriverDownloadFilepath: " ChromeDriverDownloadFilepath try, Run "%ChromeDriverMoverEXEFilepath%" "%ChromeDriverDownloadFilepath%" if(ErrorLevel = "ERROR"){ Message = Failed to run Chromedriver-Mover.exe program to automatically copy the chromedriver to Program Files.`n%ManualMoveChromedriverMessage% MsgBox 0x40,, %Message% } Message = Waiting for new Chromedriver to get moved to C:\Program Files\SeleniumBasic\ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") Loop, 30 { sleep, 1000 FileGetTime, ChromeDriverExeCurrentCreationTime, %ChromeDriverProgramFilesExeFilepath%, C ; Msgbox % "ChromeDriverExeOldCreationTime: " ChromeDriverExeOldCreationTime ; Msgbox % "ChromeDriverExeCurrentCreationTime: " ChromeDriverExeCurrentCreationTime if(ErrorLevel){ Message = chromedriver.exe not found in %ChromeDriverProgramFilesExeFilepath%. `nWaiting for new version to get copied over. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") ; sleep, 1000 Continue } if(ChromeDriverExeCurrentCreationTime != ChromeDriverExeOldCreationTime and ChromeDriverExeCurrentCreationTime != ""){ break } ; sleep, 1000 Continue } if(!FileExist(ChromeDriverProgramFilesExeFilepath)){ Message = Failed to Automatically move chromedriver.exe`n%ManualMoveChromedriverMessage% MsgBox 0x40,, %Message% ToolTip return } Message = Chromium and Chromedriver.exe were updated successfully. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") MsgBox 0x40,, %Message% ToolTip return } CheckForChromeUpdates(ChromeFilepath := ""){ if(ChromeFilepath = "") ChromeFilepath := GetInstalledChromeFilepath() CurrentInstalledChromeVersion := GetInstalledChromeVersion() CurrentChromeStableVersion := GetLatestChromeStableVersion() if(CurrentInstalledChromeVersion < CurrentChromeStableVersion){ ChromeUpdateAvailable := 1 return ChromeUpdateAvailable } else, Return 0 } GetInstalledChromeFilepath(){ ; ChromeFilepath is global variable if(ChromeFilepath = ""){ ChromePortableFilepath = %A_ScriptDir%\Lib\chrome-win64\chrome.exe ChromePortableFilepath2 = %A_ScriptDir%\Lib\chrome-win64\chrome-win64\chrome.exe ; filepath of chrome.exe that was downloaded automatically using this uploader if(FileExist(ChromePortableFilepath) or FileExist(ChromePortableFilepath2)){ if(FileExist(ChromePortableFilepath2)) ChromeFilepath := ChromePortableFilepath2 if(FileExist(ChromePortableFilepath)) ChromeFilepath := ChromePortableFilepath Message = Using Chromium Portable for Upload SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") } else { MsgBox 0x10, Chromium Portable not Found, Chromium Portable not found. `nPlease make sure it's located at one of the following paths and then try again.`n`n%ChromePortableFilepath% `nOR`n%ChromePortableFilepath2% ; Leave this in for now, but i don't think we will be going to using the system Chrome in the future. ; 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 } } ToolTip } GetInstalledChromeVersion(){ if(ChromeFilepath = ""){ GetInstalledChromeFilepath() } GetInstalledChromeVersionCommand = powershell (Get-Item '%ChromeFilepath%').VersionInfo.ProductVersion InstalledChromeVersion := RunCMD(GetInstalledChromeVersionCommand) if(InStr(InstalledChromeVersion, "`r")) InstalledChromeVersion := StrReplace(InstalledChromeVersion, "`r") ; replace any newline characters that powershell returns return InstalledChromeVersion } GetLatestChromeStableVersion(){ ; https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints json_str := urldownloadtovar("https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json") ; converts json data variable into object parsed := JSON.Load(json_str) try ChromeStableLatestVersion := parsed.channels.stable.version if(ChromeStableLatestVersion = ""){ return "Failed to parse json. " } return ChromeStableLatestVersion } GetDownloadURLOfChromeAndDriver(InstalledChromeVersion){ ; Will return the download URL of Chrome for Testing and Chrome Driver, seperated by a || ; 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 %InstalledChromeVersion% in the ChromeLabs Json" return Message } if(InstalledChromeVersion = parsed.versions[A_Index].version){ VersionIndex := A_Index ; loop through the platforms to get download URL for Chrome loop % parsed.versions[VersionIndex].downloads.chrome.count() { if(parsed.versions[VersionIndex].downloads.chrome[A_Index].platform = "win64") chromeDLURL64 := parsed.versions[VersionIndex].downloads.chrome[A_Index].url } ; loop through the platforms to get download URL for Chromedriver loop % parsed.versions[VersionIndex].downloads.chromedriver.count() { if(parsed.versions[VersionIndex].downloads.chromedriver[A_Index].platform = "win64") chromedriverDLURL64 := parsed.versions[VersionIndex].downloads.chromedriver[A_Index].url } break } } URLS = %chromeDLURL64%||%chromedriverDLURL64% return URLS }