Skip to main content

click video only if selector text is present - Puppeteer NodeJS

I have a code snippet that once goes to a youtube link, it gets videos to comment on by getting the links and then opening them in a new tab. I'm trying to get it to be so that it only gets the video link and comments if this selector is present and has the text of it say a number less than 5. (uploaded [5 - 1 minute(s)/second(s)] ago), if there aren't any videos that suitable, then the page will reload after 10seconds, and try again until 3 total videos have been found (over the time of running the script).

I tried using catching but it doesn't work as I don't exactly understand how to do this very well in my situation.

here is the selector of the time uploaded ago (as defined):

uploadedago : "#metadata-line > span:nth-child(4)",

(that's in another file called "constants>selector>index.js".)

here is the code that I'm working with:

// times the selector must say on the page
const uploadtimes = ("5 minutes", "4 minutes", "3 minutes", "2 minutes", "1 minute", "seconds", "seconds")

         try
         {
            if (tweet.includes("shorts"))
            {
               await pages.goto(tweet.replace(/shorts/, "watch"));
            }
            else
            {
               // console.log(tweet);
               await pages.goto(tweet);
            }
            try
            {
               await likeVideos.likeVideos(pages);
            }
            catch (error)
            {
               console.log(error);
            }
            await pages.bringToFront();
            await pages.waitForTimeout(4000);
            await pages.evaluate(() =>
            {
               window.scrollBy(0, 550);
            });

            try
            {
               await pages.waitForSelector(selector.catchErrorInComment,
               {
                  timeout: 4000
               });
               console.log("Can't Comment");

               await pages.close();
            }
            catch
            {
               await pages.waitForSelector(selector.inputComment,
               {
                  timeout: 4000,
               });

               await pages.evaluate(() =>
               {
                  document.querySelector('#simplebox-placeholder').click();
               });
               spinners.update('comment',
               {
                  text: 'collecting comments to copy .. ',
                  color: 'yellow',
               });

               if (config.copycomment && config.ai == false) 
               {
                  await copycommnet.copyComment(pages, spinners, config);
               }else if(config.ai){
                  await aiCommented.createComments(pages , spinners ,title, config)
               }
               else if(!config.copycomment && !config.ai)
               {
                  await manualComment.manualComment(pages, spinners, config);
               }else{
                  console.log(" Check Your Configuration")
               }
               await pages.waitForTimeout(config.delay * 1000);
               await pages.close();
               spinners.succeed('comment',
               {
                  text: 'Success commenting',
                  color: 'yellow',
               });
               Logger.log('./logs/succesCommenting.log', config.usernamegoogle, tweet, 'success')
            }
         }
         catch (e)
         {
            await pages.close();
      
               Logger.log('./logs/errorCommenting.log', config.usernamegoogle, tweet, 'failed', e)
          
         }
         await wait(config.delay);
      }

      spinners.add('delay',
      {
         text: `wait .. we are delaying for ${config.delaycomment}`,
         color: 'yellow',
      });
   }
   spinners.add('done',
   {
      text: `COMMENTS ADDED, FINISHING UP ..`,
      color: 'green',
   });
   await browser.close();
}

startApp(config, Config(paths,config,executablePath("chrome")));

function readLog()
{
   const data = fs.readFileSync('./logs/succesCommenting.log', 'utf8');
   return data;
}

Disclaimer: this is a script strictly used to scrape data on youtube only for my own channels. (it's a link of keywords that only my videos are under in the tags section.)

Via Active questions tagged javascript - Stack Overflow https://ift.tt/WZSJyrH

Comments

Popular posts from this blog

ValueError: X has 10 features, but LinearRegression is expecting 1 features as input

So, I am trying to predict the model but its throwing error like it has 10 features but it expacts only 1. So I am confused can anyone help me with it? more importantly its not working for me when my friend runs it. It works perfectly fine dose anyone know the reason about it? cv = KFold(n_splits = 10) all_loss = [] for i in range(9): # 1st for loop over polynomial orders poly_order = i X_train = make_polynomial(x, poly_order) loss_at_order = [] # initiate a set to collect loss for CV for train_index, test_index in cv.split(X_train): print('TRAIN:', train_index, 'TEST:', test_index) X_train_cv, X_test_cv = X_train[train_index], X_test[test_index] t_train_cv, t_test_cv = t[train_index], t[test_index] reg.fit(X_train_cv, t_train_cv) loss_at_order.append(np.mean((t_test_cv - reg.predict(X_test_cv))**2)) # collect loss at fold all_loss.append(np.mean(loss_at_order)) # collect loss at order plt.plot(np.log(al...

Sorting large arrays of big numeric stings

I was solving bigSorting() problem from hackerrank: Consider an array of numeric strings where each string is a positive number with anywhere from to digits. Sort the array's elements in non-decreasing, or ascending order of their integer values and return the sorted array. I know it works as follows: def bigSorting(unsorted): return sorted(unsorted, key=int) But I didnt guess this approach earlier. Initially I tried below: def bigSorting(unsorted): int_unsorted = [int(i) for i in unsorted] int_sorted = sorted(int_unsorted) return [str(i) for i in int_sorted] However, for some of the test cases, it was showing time limit exceeded. Why is it so? PS: I dont know exactly what those test cases were as hacker rank does not reveal all test cases. source https://stackoverflow.com/questions/73007397/sorting-large-arrays-of-big-numeric-stings

How to load Javascript with imported modules?

I am trying to import modules from tensorflowjs, and below is my code. test.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title </head> <body> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script> <script type="module" src="./test.js"></script> </body> </html> test.js import * as tf from "./node_modules/@tensorflow/tfjs"; import {loadGraphModel} from "./node_modules/@tensorflow/tfjs-converter"; const MODEL_URL = './model.json'; const model = await loadGraphModel(MODEL_URL); const cat = document.getElementById('cat'); model.execute(tf.browser.fromPixels(cat)); Besides, I run the server using python -m http.server in my command prompt(Windows 10), and this is the error prompt in the console log of my browser: Failed to loa...