; -------------------------------LinkedIn------------------------------- PostToLinkedIN: CurrentSite := "LinkedIn" if(StrLen(PostTitleAndBody) > 1300){ Message = Post longer than LinkedIn's 1300 character limit. Posting Skipped. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") IniWrite, Skipped - Too Long, %StatusFileFilePath%, Status, LinkedIn Return } SaveOrPostProgress(Message:="Navigating to Post Creation Page",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") URLAttempt := NavigateFromBaseURLTo("https://www.linkedin.com/login") if(URLAttempt = "Failed") Return Status := CheckCurrentTabForCurrentSite() if(Status){ Return } Message = Checking Login Status SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") sleep, 1000 try CurrentTabURL := driver.Url if(InStr(CurrentTabURL, "login")){ Message = Login Expired. Please log back in ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } Message = Clicking "Start a Post" button SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") loop, 3 { Xpath = (//span[normalize-space()='Start a post, try writing with AI'])[1] ; start a post button Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000) if(!Status) Break ; Msgbox % "Status: " Status if(Status AND A_index = 1){ try CurrentURL := driver.url Message = Failed to click on "Start a post" button`nChecking Login Status`nCurrent URL: %CurrentURL% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") try html := driver.pagesource ; save page's entire HTML to a variable if(InStr(HTML, "Sign In") AND InStr(HTML, "Forgot password")){ Xpath = //button[normalize-space()='Sign in'] Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000) driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding sleep, 2000 driver.Get("https://www.linkedin.com/feed/") ;Open selected URL ; driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding continue } else, ; otherwise check and toggle the chat popup on the side { Message = Checking if Chat Sidebar is in the way SaveOrPostProgress(Message:=Message,PostType:="Tooltip") try html := driver.pagesource ; save page's entire HTML to a variable if(InStr(HTML,"You are on the messaging overlay. Press enter to minimize it.")){ ; if sidebar is open Xpath = //body//div//aside//button[2] ; click to minimize it try driver.FindElementByXPath(Xpath).click() Message = Chat sidebar was minimized SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") Continue ; continue to next loop } } } ; DevModeMsgBox("test") ; Check if linked in post popup appeared Xpath = //div[@aria-label='Text editor for creating content'] Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000) if(Status){ Message = Failed to click into Create Post popup to input post SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") } } if(Status){ Message = Login Expired. Please log back in SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") Return } if(ImageAttachmentFilepath != ""){ ; Click the upload image button SaveOrPostProgress(Message:="Attaching Image",PostType:="Tooltip,ErrorLoggingTextFile") ; click attach image button Xpath = //button[@aria-label='Add media'] Status := Selenium_LoopToClickXpathAndWaitForOpenWindow(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000) if(Status){ Message = Failed to click "Attach Image" button with Selenium SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") Xpath = //input[@id='image-sharing-detour-container__file-input'] Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=ImageAttachmentFilepath) if(Status){ Message = Failed to Attach photo with both attempts. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } if(WinExist("Open")) ; if open image popup still exists, close it WinClose, Open ; Return } else, { if(WinExist("Open")){ Message = Closing "Open" Popup Window so Image can be send directly to input element SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") WinClose, Open } Xpath = //input[@id='media-editor-file-selector__file-input'] Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=ImageAttachmentFilepath) if(Status){ Message = Post Failed: Failed to Upload Image by sending directly to element. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } Xpath = //span[normalize-space()='Next'] Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000) if(Status){ Message = Post Failed. Image was attached successfully but failed to navigate back to New Post Page SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } ; driver.FindElementByXPath(Xpath).SendKeys(ImageAttachmentFilepath) /* Status := InputFilePathIntoOpenWindow(ImageAttachmentFilepath) if(Status) { Message = Failed to input filepath into "Open File" window. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } */ } ; sleep, 10000 /* Xpath = //span[normalize-space()='Done'] ; click done button Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=10,SleepLength:=1000) if(Status){ Message = Failed to click "Done" button on image upload SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } SaveOrPostProgress(Message:="Waiting 5 seconds for Image to finish uploading",PostType:="Tooltip,ErrorLoggingTextFile") sleep, 5000 */ } Message = Inputting Post SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") ; Input Post text contents loop, 3 { Xpath = //div[@aria-label='Text editor for creating content'] ; Input text of post Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000,StringTextContent:=PostTitleAndBody) if(Status){ Message = Failed to input post content SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") } ; Double check that post got input Jscheck = return document.querySelector("div[aria-label='Text editor for creating content']").innerText try Status := driver.executeScript(Jscheck) ; DevModeMsgBox(Status) if(StrLen(Status) > 5) Break if(A_index = 3){ Message = Post Failed: Failed to input Post for some reason SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } ; Continue } if(InStr(PostTitleAndBody, "http") OR InStr(PostTitleAndBody, "www")){ Message = Waiting 10 seconds for Preview to Get Fetched SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") sleep, 10000 } else, { sleep, 2000 } SaveOrPostProgress(Message:="Submitting Post",PostType:="Tooltip,ErrorLoggingTextFile") if (ConfirmBeforeSubmit && ConfirmBeforeSubmitMsgboxFunc() != true) { Message = User Selected STOP button when asked for confirmation. Cancelling Rest of Site Upload. SaveOrPostProgress(Message:=Message, PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") return } Xpath = //span[normalize-space()='Post'] ; Click the final "post" button Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000) if(Status){ Jscheck = return document.querySelector("div[aria-label='Text editor for creating content']").textContent ; Grabb innertext try TextContent := driver.executeScript(Jscheck) Message = Failed to Submit Post SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") Message = Failed to Submit Post: Text Content that got input: %TextContent% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } /* ; Keep trying to click the home button until able to and then move on to next site because sometimes it takes a while for a post to upload Xpath = //span[normalize-space()='Home'] Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=30,SleepLength:=1000) */ IniWrite, Successful, %StatusFileFilePath%, Status, LinkedIn AddToTotalPostsPostedCount() ; DevModeMsgBox("done!") PauseBetweenPosts() DevModeMsgBox("done!") Message = Post Publish Successful SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") Return ; -------------------------------/LinkedIn-------------------------------