From b5f51ca937a68771cdcf2d91b074f35a53c426b5 Mon Sep 17 00:00:00 2001 From: Yuriy Date: Thu, 26 Jan 2023 23:01:52 -0500 Subject: [PATCH] Temporarily removed auto-updater functionality until i can reprogram it to pull from gitea, Small error checks for multiple sites, Added ability to activate Parler tab by clicking on Parler button on Post Complete Window --- Freedomain Social Media Poster.ahk | 38 ++++-- Lib/SharedFunctions.ahk | 209 ++++++++++++++++------------- 2 files changed, 141 insertions(+), 106 deletions(-) diff --git a/Freedomain Social Media Poster.ahk b/Freedomain Social Media Poster.ahk index b3cf1a9..e5664dc 100644 --- a/Freedomain Social Media Poster.ahk +++ b/Freedomain Social Media Poster.ahk @@ -79,9 +79,6 @@ Changelog := StrReplace(changelog, "`n", "--") ; @todo: Add tags support on all sites that support it - ask stef is useful ; @todo: save post tags and title to teh same file as ini file instead of two files -; @todo: Add workaround for all chrome tabs not being counted properly by selenium, using array? -; @todo: add support for scheduled posts. - ; Misc info ;------------------------------------------------ ; Parler has a 1k char limit @@ -224,9 +221,9 @@ IniWrite, %ScriptVersion%, %SettingsIniFilepath%, %ScriptSettingsSection%, Scrip ; Download Program Updater if(!FileExist(FreedomainProgramUpdaterFilepath)){ - TooltipThis("Downloading Program Updater") - UrlDownloadToFile, %FreedomainProgramUpdaterURL%, %FreedomainProgramUpdaterFilepath% - ToolTip + ; TooltipThis("Downloading Program Updater") + ; UrlDownloadToFile, %FreedomainProgramUpdaterURL%, %FreedomainProgramUpdaterFilepath% + ; ToolTip } @@ -891,10 +888,15 @@ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,Disc ScriptRunTime := round(((A_TickCount - StartTime) / 1000), 2) + +; DevModeMsgBox(URLOfLastErrorPage) + if(URLOfLastErrorPage != ""){ Message = Activating Tab of last failed post. SaveOrPostProgress(Message:=Message,PostType:="Tooltip") - +; DevModeMsgBox("pause") + ; message = URLOfLastErrorPage: %URLOfLastErrorPage% + ; DevModeMsgBox(URLOfLastErrorPage) FindAndActivateTab(URLOfLastErrorPage) } @@ -976,7 +978,7 @@ Gui, Font, s%GUINormalFontSize% Gui, Add, Button,x%StatusTextSecondRowXPos% y+%MarginSpace% w%WebsiteButtonWidths% h%ButtonHeights% Center, Flote Gui, Add, Edit, x+5 w%WebsiteStatusEditWidths% h%ButtonHeights%, %Flote% -Gui, Add, Button,x%StatusTextSecondRowXPos% y+%MarginSpace% w%WebsiteButtonWidths% h%ButtonHeights% Center, Parler +Gui, Add, Button,x%StatusTextSecondRowXPos% y+%MarginSpace% w%WebsiteButtonWidths% h%ButtonHeights% gActivateParlerTab Center, Parler Gui, Add, Edit, x+5 w%WebsiteStatusEditWidths% h%ButtonHeights%, %Parler% Gui, Add, Button,x%StatusTextSecondRowXPos% y+%MarginSpace% w%WebsiteButtonWidths% h%ButtonHeights% Center, Steemit @@ -1021,6 +1023,13 @@ AddToTotalRunTime() Return +ActivateParlerTab: +DevModeMsgBox("activating") +DevModeMsgBox(ParlerTabURL) +FindAndActivateTab(ParlerTabURL) + +Return + SendErrorLoggingThroughTelegram: Message = Uploading Errorlog to FDRBotTesting Telegram Server. @@ -1188,7 +1197,7 @@ if(ImageAttachmentFilepath = "" AND Status){ ; upload a temporary file and then } ; driver.FindElementByXPath(Xpath).click() -/* + Xpath = //span[normalize-space()="What's on your mind, Stefan?"] Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000) @@ -1205,7 +1214,7 @@ if(ImageAttachmentFilepath = "" AND Status){ ; upload a temporary file and then Return } } - */ + } if(ImageAttachmentFilepath != "") { ; otherwise send image straight to upload input box. The post box will open up automatically Message = Attaching Image @@ -1319,9 +1328,11 @@ if(Status){ ; Check login status by checking the header of the page for "Feed" text js = return document.querySelector(".header__contain").innerText try status := driver.executeScript(js) -if(InStr(!status, "Feed")){ +if(!InStr(status, "Feed")){ ; SaveOrPostProgress(Message:="Login Expired. Please log back in",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") SaveOrPostProgress(Message:="Login Expired. Please log back in",PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + ; ParlerTabURL := + try ParlerTabURL := driver.URL SaveDriverURLOFErrorPage() Return } @@ -1587,6 +1598,7 @@ if(InStr(CurrentTabURL, "/login")){ } + DiscordMessagePartOne := SubStr(Message, 1, SplitCharNumber) SplitCharNumber := SplitCharNumber + 1 DiscordMessagePartTwo := SubStr(Message, SplitCharNumber) @@ -1674,7 +1686,7 @@ if(InStr(CurrentTabURL, "/login")){ Status := NavigateFromBaseURLTo(SubscribeStarProfileURL) if(Status){ - Message = Failed to Navigate to Feed URL + Message = Failed to Navigate to SubScribeStar Page SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") } @@ -2230,7 +2242,7 @@ if(InStr(CurrentTabURL, "/login")){ sleep, 2000 - SaveOrPostProgress(Message:="Inputting Post Content",PostType:="Tooltip,ErrorLoggingTextFile") + SaveOrPostProgress(Message:="Inputting Post Content`nMight take 5-15 seconds to get input",PostType:="Tooltip,ErrorLoggingTextFile") ; Click the plus button to make the title box show up Xpath = //div[@class='m-composer__base m-composer__base--withPreview']//i[@class='material-icons ng-star-inserted'][normalize-space()='add_circle_outline'] diff --git a/Lib/SharedFunctions.ahk b/Lib/SharedFunctions.ahk index a91005c..82aa921 100644 --- a/Lib/SharedFunctions.ahk +++ b/Lib/SharedFunctions.ahk @@ -153,11 +153,11 @@ UpdateScript(){ ; sleep, 5000 if(SaveFilepath = ""){ - SaveFilepath := ErrorLoggingDirectory - } + SaveFilepath := ErrorLoggingDirectory + } - ; if(!FileExist(SaveFilepath)) - FileCreateDir, %SaveFilepath% + ; if(!FileExist(SaveFilepath)) + FileCreateDir, %SaveFilepath% /* if(!TakeScreenshotsOfErrors) Return @@ -947,127 +947,141 @@ if(TotalTabsFound = 1){ } ; -------------------------------NavigateFromBaseURLTo------------------------------- - NavigateFromBaseURLTo(URL,PageTitle := "New Tab"){ + NavigateFromBaseURLTo(URL){ if(!DriverStatus){ ; if not connected to selenium chrome, then re-connect Status := CheckSeleniumDriver() if(Status) Return "Failed" - CreateArrayOfTabs() + CreateArrayOfTabs() ; store all open tabs to memory for later usage } - if(ReuseTabs){ - URLBase := StrReplace(URL,"https://","") - URLBase := StrSplit(URLBase, "/") - URLBase := URLBase[1] - URLBase := StrReplace(URLBase, "www.","") - } + if(ReuseTabs){ ; pull out base of URL and check if it's within the array of tabs + URLBase := StrReplace(URL,"https://","") + URLBase := StrSplit(URLBase, "/") + URLBase := URLBase[1] + URLBase := StrReplace(URLBase, "www.","") + } - if(!HasSubstringVal(DriverURLArray, URLBase)) ; returns position of value in array - { - try, run "%ChromeFilepath%" "%URL%" - DriverURLArray.Push(URL) ; Append an item to the array - NewTabCreated := 1 - sleep, 1000 - } - ; msgbox, + if(!HasSubstringVal(DriverURLArray, URLBase)) ; if base url is not in tab array, create new tab and push url to array + { + try, run "%ChromeFilepath%" "%URL%" + DriverURLArray.Push(URL) ; Append an item to the array + NewTabCreated := 1 + sleep, 2000 + } + ; msgbox, - Message = Finding Tab - SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") + Message = Finding Tab + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") - TabFoundSuccessfully := + TabFoundSuccessfully := - NumberOfTabLoops := DriverURLArray.Length() + NumberOfTabLoops := DriverURLArray.Length() - ; NumberOfTabLoops := Driver.Windows.Count + 2 - loop % NumberOfTabLoops { ; loop through tabs to find matching tab - try driver.SwitchToNextWindow() + ; NumberOfTabLoops := Driver.Windows.Count + 2 + loop % NumberOfTabLoops { ; loop through tabs to find matching tab + try driver.SwitchToNextWindow() - ; sleep, 1000 - ; msgbox, looping through tabs - try CurrentTabTitle := driver.window.title - try CurrentTabURL := driver.Url + ; sleep, 1000 + ; msgbox, looping through tabs + try CurrentTabTitle := driver.window.title - if(CurrentTabTitle = PageTitle OR InStr(CurrentTabURL, URLBase)){ - ; msgbox, found it.`n%CurrentTabTitle% = %PageTitle%`n%CurrentTabURL% = %URLBase% - TabFoundSuccessfully := 1 - ; msgbox %CurrentTabTitle% = %PageTitle% - ; msgbox %CurrentTabURL% = %URL% - Break - } - } + ; caused by tab being manually closed. Not sure if this is the only cause though. + if(CurrentTabTitle = "") { + Message = CurrentTabTitle: %CurrentTabTitle% + DevModeMsgBox(Message) + + Message = CurrenttabURL: %CurrentTabURL% + DevModeMsgBox(Message) + + ; try driver.SwitchToNextWindow + Continue + } + + + try CurrentTabURL := driver.Url + + if(InStr(CurrentTabURL, URLBase)){ + ; msgbox, found it.`n%CurrentTabTitle% = %PageTitle%`n%CurrentTabURL% = %URLBase% + TabFoundSuccessfully := 1 + ; msgbox %CurrentTabTitle% = %PageTitle% + ; msgbox %CurrentTabURL% = %URL% + Break + } + } - if(!NewTabCreated){ ; if re-using a tab then we want to re-navigate to URL because it might be the wrong page + if(!NewTabCreated){ ; if re-using a tab then we want to re-navigate to URL because it might be the wrong page + try driver.Get(URL) ;Open selected URL + try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding + catch e { + ; msgbox, error caught. trying something + try driver.switchToalert().accept() try driver.Get(URL) ;Open selected URL - try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding catch e { - ; msgbox, error caught. trying something - try driver.switchToalert().accept() - try driver.Get(URL) ;Open selected URL - catch e { - Message = Failed to Navigate to %URL%: Please Check for Any Open Dialogue Boxes - SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") - Return "Failed" - } + Message = Failed to Navigate to %URL%: Please Check for Any Open Dialogue Boxes + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return "Failed" } } - ; msgbox, no error caught - ; } + } + ; msgbox, no error caught + ; } - Return - } - ; End of Function - ; -------------------------------/NavigateFromBaseURL------------------------------- + Return + } + ; End of Function + ; -------------------------------/NavigateFromBaseURL------------------------------- - 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 - } + 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 + } - ; -------------------------------SChrome_Get------------------------------- - SChrome_Get(URL := "", Profile := "Profile 1", IP_Port := "127.0.0.1:9222"){ - IP_Port_Nr := RegExReplace(IP_Port, ".*:(\d*)", "$1") - if WinExist("ahk_exe Chrome.exe"){ - WinGet, pid, PID, ahk_exe chrome.exe - for item in ComObjGet("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId='" pid "'"){ - if RegExMatch(item.CommandLine, "i)--remote-debugging-port=\K\d+", port){ - break - } + ; -------------------------------SChrome_Get------------------------------- + SChrome_Get(URL := "", Profile := "Profile 1", IP_Port := "127.0.0.1:9222"){ + IP_Port_Nr := RegExReplace(IP_Port, ".*:(\d*)", "$1") + if WinExist("ahk_exe Chrome.exe"){ + WinGet, pid, PID, ahk_exe chrome.exe + for item in ComObjGet("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId='" pid "'"){ + if RegExMatch(item.CommandLine, "i)--remote-debugging-port=\K\d+", port){ + break } + } - if (Port=""){ - MsgBox, 36, ,Chrome Needs to be started in debugging mode in order for Autohotkey to connect to it.`nIs it ok to restart Chrome in debugmode to enable a connection? - IfMsgBox, Yes - { - Message = Restarting Chrome in Debug Mode - SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + if (Port=""){ + MsgBox, 36, ,Chrome Needs to be started in debugging mode in order for Autohotkey to connect to it.`nIs it ok to restart Chrome in debugmode to enable a connection? + IfMsgBox, Yes + { + Message = Restarting Chrome in Debug Mode + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") - While(WinExist("ahk_exe chrome.exe")) { - WinClose, ahk_exe chrome.exe - } - Process, WaitClose, chrome.exe - } - Else{ - Msgbox, 4096, Error, Cannot connect to Chrome profile if it is Not running in debug mode. Script Terminating - ExitApp - ; @todo: Make this error out to the script result screen + While(WinExist("ahk_exe chrome.exe")) { + WinClose, ahk_exe chrome.exe } + Process, WaitClose, chrome.exe + } + Else{ + Msgbox, 4096, Error, Cannot connect to Chrome profile if it is Not running in debug mode. Script Terminating + ExitApp + ; @todo: Make this error out to the script result screen } } + } - ; ; yuriy's settings - ; IniRead, ChromeFilepath, C:\Users\%A_username%\Documents\Autohotkey\Lib\ScriptSettings.ini, Selenium, %A_Computername%, %A_Space% + ; ; yuriy's settings + ; IniRead, ChromeFilepath, C:\Users\%A_username%\Documents\Autohotkey\Lib\ScriptSettings.ini, Selenium, %A_Computername%, %A_Space% - ; ; 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 - } + ; ; 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 = ""){ @@ -1408,13 +1422,22 @@ SaveDriverURLOFErrorPage(){ ; save the url of the result page. That way if a tab FindAndActivateTab(TabURL){ - + DevModeMsgBox(TabURL) Loop, { if(A_index = 30) break try CurrentTabTitle := driver.window.title + if(CurrentTabTitle = "") ; caused by tab being manually closed. Not sure if this is the only cause though. + { + ; DevModeMsgBox("currenttabtutle is blank") + try driver.SwitchToNextWindow + Continue + } + + ; DevModeMsgBox(CurrentTabTitle) try CurrentTabURL := driver.Url + DevModeMsgBox(CurrentTabURL) if(CurrentTabURL = TabURL) Break