RumbleUpload: ;------------------------------------------------ CurrentSite := "Rumble" SaveOrPostProgress(Message:="Scheduling Post in Rumble Studio",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") Status := NavigateFromBaseURLTo("https://studio.rumble.com/api/signin") if(Status) Return try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding CheckForAlerts() Message = Checking Login Status SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") try CurrentURL := driver.URL if(InStr(CurrentURL, "/sso/auth/consent")){ Message = Rumble Studio Logged out. Trying to log back in. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") ; login button in middle of page Xpath = //button[@class='consent-page--button header-user'] Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000) sleep, 2000 try CurrentURL := driver.URL if(InStr(CurrentURL, "/sso/auth/consent")){ Message = Failed to login to Rumble Studio SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") Return } } try CurrentURL := driver.URL if(InStr(CurrentURL, "/login.php")){ if(AutoLogin){ Message = Logging in Automatically by clicking into the UN+PW fields for info to register SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") ; have to click into username and password field for page to register that there's input ; clicking with JS doesn't make it register, but with xpath selenium it does Xpath = //input[@id='login-username'] driver.FindElementByXPath(Xpath).click() Xpath = //input[@id='login-password'] driver.FindElementByXPath(Xpath).click() js = document.querySelector("button[type='submit']").click(); driver.executeScript(js) ; Do a double check to make sure that login worked Message = Checking Login Status SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") try CurrentURL := driver.URL if(!InStr(CurrentURL, "/upload")){ Message = Failed to log back in. Please Log Back In Manually SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } } else, { ; notify user and return Message = Login Expired. Please Log Back in SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } Message = Waiting 5 seconds for page to fully load SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") sleep, 5000 } ; CheckForAlerts() Message = Uploading Video File SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") Xpath = //input[@id='Filedata'] Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoFilepath) if(Status){ try, CurrentURL := GetCurrentTabURlBase() Message = Failed to Upload Video File`nCurrent Tab URL: %CurrentURL% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } ; Input Title try driver.findElementsByName("title").item[1].SendKeys(VideoTitle) ;selects element based on Name and sends variable to it. catch e { Message = Video Upload Failed, Please Check Login Status SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } ; Input Description Loop, 5 { ; Attempt to input video description a couple of times TooltipThis("Inputting Description `nAttempt Number: " A_index) status := js_SendAndCheckWithID(Element:="description",ValueToCheck:="value",SleepLength:=3000,JSStringText:=JSVideoDescription) if(!Status) Break /* if(A_index = 5){ Clipboard := VideoDescription Message = Unable to Input Video Description`nDescription copied to clipboard, please paste it in at your earliest convenience. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") Return } js = document.getElementsByName('description')[1].value = "%JSVideoDescription%"; ; Send content through javascript (Great for getting around emoji chrome limitaitons) try driver.executeScript(js) ;Executes a Javascript on the webpage, mostly used for buttons. try Description := driver.findElementsByName("description").item[2].Attribute("value") ;XPath: ID=site-title & span tag if(Description != "") Break sleep, 2000 */ } ; sleep, 5000 Message = Selecting Channel SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") ; try driver.findElementsByID("channelId").item[1].click() ; @todo replace with regex js = return document.querySelector("#channelId").innerHTML; try, ChannelIDNumber := driver.executeScript(js) ; Msgbox % "ChannelIDNumber: " ChannelIDNumber ChannelIDNumber := StrSplit(ChannelIDNumber, "option value=") ; Msgbox % "ChannelIDNumber: " ChannelIDNumber ChannelIDNumber := ChannelIDNumber[3] ; Msgbox % "ChannelIDNumber: " ChannelIDNumber SingleQuote = " ChannelIDNumber := StrSplit(ChannelIDNumber, "data-private") ChannelIDNumber := ChannelIDNumber[1] ChannelIDNumber := StrReplace(ChannelIDNumber, SingleQuote, "") ChannelIDNumber := StrReplace(ChannelIDNumber, " ", "") ; Msgbox % "ChannelIDNumber: " ChannelIDNumber ; js = return document.querySelector("#channelId").value; ; try, ChannelIDNumber := driver.executeScript(js) ; Msgbox % "ChannelIDNumber: " ChannelIDNumber if(ChannelIDNumber = ""){ Message = ChannelIDNumber is blank. Unable to select Upload Channel SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } ChannelIDNumber = 6070526 ; freedomain ; ChannelIDNumber = 762377 ; personal Xpath = //option[@value='%ChannelIDNumber%'] try driver.FindElementByXPath(Xpath).click() catch e { Message = Failed to click on Channel using %ChannelIDNumber%. SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") } ; Input Tags Message = Inputting Tags SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile") try driver.findElementsByName("tags").item[1].SendKeys(VideoTags) ;selects element based on Name and sends variable to it. ; Custom Thumbnail if(VideoThumbFilepath != "") { TooltipThis("Uploading Thumbnail") Xpath = //input[@name='customThumb'] Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath) if(Status){ Message = Failed to Upload Thumbanil SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") } ; @todo: Add a check to see if progress gets stuck ; Check Upload Percentage TooltipThis("Waiting for Video to Finish Uploading") Loop, %Number_of_loops_to_Check_Upload_status% { sleep, %Time_Between_Loops_Upload_Status% jscheck = return document.getElementsByClassName('num_percent')[0].textContent; try RumbleUploadPercent := driver.executeScript(jsCheck) ; try RumbleUploadPercent := driver.findelementbyxpath(Xpath).Attribute("textContent") RumbleUploadPercent := StrSplit(RumbleUploadPercent, " ") RumbleUploadPercent := RumbleUploadPercent[1] if(InStr(RumbleUploadPercent, "100%")) ; once variable contains 100%, then we can break out of loop and continue Break Status := Check_For_Stuck_Video_Upload(A_index, RumbleUploadPercent) if(Status = "Failed") Return ; if(HasVal(Array_Index_Num_of_Upload_StatusChecks, A_index)) { ; 30 minutes and 60 minutes - send a notification message ; Message = Upload Progress: %RumbleUploadPercent% ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") ; } } ; Msgbox % "RumbleUploadPercent: " RumbleUploadPercent ; Click on one of the video thumbnail options first ; Seems to be a bug on rumble, in order to be able to select a custom thumb through js, gotta select on of the generated ones first. ; Xpath = /html/body/main/div/div/div/section/form[1]/div/div[2]/div[3]/a[2] ; thumbnail option #3 ; try driver.FindElementByXPath(Xpath).click() ;Clicks on Xpath based on variable. /* js = document.getElementById('customThumb').click(); driver.executeScript(js) ;Executes a Javascript on the webpage, mostly used for buttons. Status := InputFilePathIntoOpenWindow(VideoThumbFilepath) if(Status) { Message = Upload Failed:`nUnable to Find "Open File" window to input filepath into SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") Return } */ } if(ConfirmBeforeSubmit) msgbox, Please check that all data was input correctly and then click OK to Publish Video try UploadPageURL := driver.URL ; Submit Button js = document.getElementById('submitForm').click(); try driver.executeScript(js) ; try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding ; Select Rumble Only Licensing js = document.getElementsByClassName('greenLink mRight last')[0].click(); ; Send content through javascript (Great for getting around emoji chrome limitaitons) try driver.executeScript(js) ;Executes a Javascript on the webpage, mostly used for buttons. ; Check off condition 1 js = document.getElementById("crights").click() try driver.executeScript(js) ; Check off condition 2 js = document.getElementById("cterms").click() try driver.executeScript(js) ; Click the Submit Button js = document.getElementById("submitForm2").click() try driver.executeScript(js) ; Loop until able to grab the direct link from the result page. Loop, 24 { TooltipThis("Waiting for Result Page to load to grab Video URL") Sleep, 5000 js = return document.getElementById("error_files_2").textContent; RumbleError := driver.executeScript(js) ;Executes a Javascript on the webpage, mostly used for buttons. if(RumbleError != "") { Message = Rumble Upload Failed due to:`n%RumbleError% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } js = return document.getElementById('direct').value; try RumbleURL := driver.executeScript(js) ;Executes a Javascript on the webpage, mostly used for buttons. /* try RumbleURL := driver.findElementsByID("direct").item[1].Attribute("value") ;grab Direct Link from the result page catch e { ; if not able to grab it, then sleep for 5 seconds and then loop again Continue } */ if(RumbleURL != ""){ ; If URL is grabbed from result page, then kick out of loop Break } if(A_Index = 10) ; if looped for 5 minutes and still no URL grabbed { ; @todo: add error check if submit button clicked and error appears Xpath = /html/body/main/div/div/div/section/form[2]/div/div[9] ; grab inner content of where error usually appears. try RumbleUploadError := driver.findelementbyxpath(Xpath).Attribute("innerText") ; Grabb innertext ; Msgbox % "UseThumbUploadToolTextExist: " UseThumbUploadToolTextExist Message = Upload Error (E#1341)`nVideo Uploaded but not able to be finalized.`nPlease fix the issue and click the final submit button. `nError: %RumbleUploadError% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") SaveDriverURLOFErrorPage() Return } } IniWrite, %RumbleURL%, %VideoLinksIniFile%, URLs, RumbleURL Message = Upload Complete: %RumbleURL% SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") SaveDriverURL() AddToTotalVideosUploadedCount() Return