From a008541c7c229043be5ba1c1d507f08206d5b062 Mon Sep 17 00:00:00 2001 From: Yuriy Date: Wed, 8 May 2024 21:35:32 -0400 Subject: [PATCH] fixed locals thumbnail upload, rumble URL grab --- Modules/Locals-Schedule.ahk | 41 ++++- Modules/Rumble-Schedule.ahk | 335 ++++-------------------------------- 2 files changed, 68 insertions(+), 308 deletions(-) diff --git a/Modules/Locals-Schedule.ahk b/Modules/Locals-Schedule.ahk index 5392650..ded3be1 100644 --- a/Modules/Locals-Schedule.ahk +++ b/Modules/Locals-Schedule.ahk @@ -34,7 +34,6 @@ CheckForAlerts() ; Input Title and Description into Create a Livestream - First Screen ; ------------------------------------------------ Xpath = //input[@id='title'] -; try, driver.FindElementByXPath(Xpath).SendKeys("TEST STRINGHERE") Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamTitle) if(Status){ @@ -96,6 +95,39 @@ try, driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.BackSpace).SendKeys(d Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LocalsLivestreamTime) + + +; Upload Custom Thumbnail +; ------------------------------------------------ + +if(Livestreamthumbnail){ + Message = Uploading Thumbnail + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + + ; this `label` element is a child of the thumbnail input element. + xpath = (//label[@id='photo-upload-btn'])[2] + + ; the element ID for input elements seems to change/be generated each time the page is generated + XpathIDForUploads := GetHTMLValueFromXpathOuterHTML(XPATH, "label for") + + if(XpathIDForUploads = "Failed"){ + Message = Failed to grab element needed for uploading thumbnail. Please attach thumbnail manually. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + + ThubmnailInputXpath = (//input[@id='%XpathIDForUploads%'])[1] + Status := Selenium_LoopToSendValueToXpath(Xpath:=ThubmnailInputXpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=Livestreamthumbnail) + if(Status){ + Message = Failed to upload livestream thumbnail + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + + Sleep, 2000 +} + + if(ConfirmBeforeSubmit){ OnMessage(0x44, "OnMsgBoxUserConfirmation") MsgBox 0x21, User Confirmation, Please check that all data was input correctly and fix any mistakes and then click PROCEED to finalize the Upload.`n`nClick STOP to cancel the rest of this Upload and move on to the next website. @@ -127,7 +159,12 @@ if(!InStr(LivestreamURL, "https")){ ; @todo } -; Navigate to the post + + + + +; Navigate to the Post and Grab the URL +; ------------------------------------------------ Message = Navigating to Livestream Page to grab RTMP Settings SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") diff --git a/Modules/Rumble-Schedule.ahk b/Modules/Rumble-Schedule.ahk index c7b8ed4..74be055 100644 --- a/Modules/Rumble-Schedule.ahk +++ b/Modules/Rumble-Schedule.ahk @@ -223,350 +223,73 @@ if(Status){ } +Message = Waiting 15 seconds before Navigating to Rumble and Grabbing Livestream URL +SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") +sleep, 15000 -try, driver.get("https://rumble.com/account/live-streaming") - -Xpath = (//a[normalize-space()='Livestream Coming Soonish!'])[1] -; Try ElementOuterHTML := driver.findelementbyxpath(Xpath).Attribute("outerHTML") ;XPATH-ID & Tag -RumbleURLSlug := GetHTMLValueFromXpathOuterHTML(XPATH, "href") -if(RumbleURLSlug = "" or RumbleURLSlug = "Failed"){ - Message = Failed to grab Rumble URL Slug from Livestreams Page - SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") - Return +try, driver.get("https://rumble.com/account/live-streaming") +catch e { + Message = Failed to Navigate to Rumble.com + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return } -RumbleLivestreamURL := "https://rumble.com" . RumbleURLSlug - -IniWrite, %RumbleLivestreamURL%, %PostStatusesFilepath%, Livestream,RumbleLivestreamURL - - -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, driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding - 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 - } +Xpath = (//span[@class='video-info-status recorder'])[1] - - } - else, { ; notify user and return - Message = Login Expired. Please Log Back in +Loop, 5 { + if(A_index = 5){ + Message = Failed to grab livestream URL. `nAfter 5 checks the top livestream is still not in -Waiting for Stream- status. 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 + try StreamStatus := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text + if(StreamStatus != "Waiting for Stream"){ + Message = First Livestream on the list is not in -Waiting for Stream- status.`nWaiting 30 seconds and checking again. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + sleep, 30000 + try, driver.executeScript("history.go(0)") ;refresh page + try, driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding } + else, + break - 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 = (//h2[@class='video-title'])[1] -Xpath = //option[@value='%ChannelIDNumber%'] -try driver.FindElementByXPath(Xpath).click() -catch e { - Message = Failed to click on Channel using %ChannelIDNumber%. +RumbleURLSlug := GetHTMLValueFromXpathOuterHTML(XPATH, "href") +if(RumbleURLSlug = "" or RumbleURLSlug = "Failed"){ + Message = Failed to grab Rumble URL Slug from Livestreams Page 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 - } - - */ - - } +RumbleLivestreamURL := "https://rumble.com" . RumbleURLSlug -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) ; - +IniWrite, %RumbleLivestreamURL%, %PostStatusesFilepath%, Livestream,RumbleLivestreamURL -try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding +return -; 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