Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Select all images on Pinterest for moving to another board

UPDATE: (2015-10-16) [SOLVED!] -- Fixed with trigger() and by limiting to 50 pins with slice().

Many thanks to Abhas Tandon who offered that by using

$(this).trigger('click');

instead of

$(this).addClass('selected');

it will correctly select the images. I tested with a board consisting of 21 images and it worked perfect! However when trying to move 300+ pins, it failed with this error:

"You can only move 50 Pins at a time." 

I then solved that issue by using JavaScript's slice() function to grab only the first 50 images. Tested and it works correctly now. So my limitions are currently that I can only select and move 50 pins at a time, but that's much better than having to pick them one by one by hand!


FINAL WORKING CODE:

function checkAll() {
    console.log("Checkboxes count: " + checkBoxes.length);

    $.each(checkBoxes, function(i, v) {
      console.log("Checkbox #: " + i)// + " = " + v);
      $(this).trigger('click');

    });
}

var checkBoxes = $("div > div > div.bulkEditPinWrapper > button");

var checkBoxes = checkBoxes.slice(1, 51);

checkAll();




DESCRIPTION OF ISSUE:

I'm having some trouble with a Pinterest interface (?) script (?) I'm developing. I'm a programmer, mostly self-taught, and I think I'm missing some key component of understanding about AJAX possibly? This is the second time I've tried to write a jQuery script to interface with Pinterest. The first one was an attempt to defeat the infinite scroll feature (AKA "load more" button) in order to have all images displayed on one page, from which I could scrape image links and then download them with a browser plugin to backup my Pinterest boards to my computer. My code all worked except it didn't actually end up downloading any images.

Disappointed, I put that on hold to focus on other things. Eventually I revisited my code and did some digging and it should have worked. My research indicated that the CRITICAL FLAW that may have been preventing my program from doing what I wanted was something to with "Pinterest uses AJAX". While I'm aware of the term "Asynchronous JavaScript with XML" and "XMLHttpRequest", I'm not an expert by any stretch at implementing AJAX.

With my latest code, I wrote a -- you would think it would be -- quick little jQuery script to select all images so that I can move them, delete, copy, etc ... The problem is that though checking all the boxes works (You must be in a board and click on "Move" for instance), when I click the "Move" button a second time which should pop-up a modal letting choose which board to move to, all I get is

Oops!
Select the Pins you want to move.


USING:

  • Chrome 45.0.2454.101
  • Windows 8.1 64-bit


HOW TO REPRODUCE ISSUES:

  1. Login to your Pinterest account on a laptop or desktop computer.
  2. Choose one of your boards or build a test board from scratch (so you don't loose any of your current pins).
  3. Click "Move" on the top right. This will make transparent checkboxes appear in the upper right of each image. Note: Pinterest shows their unchecked checkboxes WITH a check mark already in them. The way you know a box has been checked is that it retains the checkmark and the box background turns solid (not transparent anymore) red.
  4. In your browser launch your developer tools console (Firefox/Chrome: F12).
  5. Add the below script to your JavaScript console in your browser.
  6. Run the script. If it "worked" you should see all of the checkboxes are now red.
  7. Click the "More" button again. Now you will get the "Select the Pins you want to move." message, indicating that in actuality, the select all did not work.

NOTE: I'm not concerned about pagination at this point, but if anyone wants to address that I'm open to solutions on that issue as well.


SCRIPT TO SELECT ALL IMAGES:

/* 
   @Repo:     EHW-JavaScript-Pinterest-SelectAllImages.

   @Creator:  Eric Hepperle (CodeSlayer2010/CodeWizard13)
   @Date:     10/15/15
   @Version:  1.0

   @Purpose:  Click "Move" in Pinterest board to move pins.
              Once checkboxes are visible, run this in an
              F12 browser console to automatically check all
              visible image pins. You will have success when
              the color of all checkboxes turns red. Then
              click "Move" again to finish.

    @Notes:
        2015.10.15
            - Created script.
            - Checks all checkboxes, but does not allow moving.

*/

function checkAll() {
    console.log("Checkboxes count: " + checkBoxes.length);

    $.each(checkBoxes, function(i, v) {
      console.log("Checkbox #: " + i)// + " = " + v);
      $(this).addClass('selected');

    });
}

//$(document).ready(function() {
    alert('hi');

    var checkBoxes = $("div > div > div.bulkEditPinWrapper > button");

    checkAll();
//});


WHAT I TRIED TO FIX IT ALREADY:

  1. Googled for solution. I found the following articles. That last one seemed like it might be what I needed, but it did not seem to be focused enough on my issue.

    • StackOverflow | jQuery to add a class to image links without messing up when the link passes variables
    • Quora | Pinterest User Feedback: Can you provide options to "select multiple pins and pin them into a board" or "to pin an image into multiple boards at a time"?
    • StackOverflow | Identify & Extract the title/description of an Image (Data Scraping Pinterest)
    • StackOverflow | Get all images from a board from a Pinterest web address
  2. Originally tried setting each checkbox's "checked" property to "true", but it did not end up checking the boxes (why??). But,then I observed in a browser console that when I clicked to select an image the "selected" class was applied to that image. So, I used addClass() to apply that class to all checkboxes in my code and I was able to get all the checkboxes to select properly then ... or so it seemed.

  3. I tried the code with a call to $(document).ready, but it gave me the error

    "Uncaught ReferenceError: checkBoxes is not defined(…)"
    


It took me forever to format this ... thanks in advance for your help. I'm happy to clarify if anything was unclear. Also, please let me know if this post belongs in a different forum. Thanks.

like image 709
Eric Hepperle - CodeSlayer2010 Avatar asked Oct 15 '15 21:10

Eric Hepperle - CodeSlayer2010


People also ask

How to move Pinterest Pins to another board?

Click on the section that you want to move. Step 3: When the section opens, click on Organize and select the pins by clicking on them that you want to move. In case you want to move all the pins, click on Select All. Step 4: Once you have selected the desired pins, click on Move. Step 5: Pinterest will show your boards.

How to add a section to a Pinterest board?

Step 1: Launch the Pinterest app and go to your profile screen by tapping on the profile picture icon at the bottom. Step 2: Tap on the board where you want to add a section to open it. Step 3: Tap on the add icon (+) at the top-left corner and select Section. Give it a name, and you are ready to add or move pins into it.

How do I move pins from one section to another?

Go to your profile page to view your boards. Step 2: Open the board where you want to create a section. That is the board where you want to move pins from an existing section. Hit the add (+ icon) and select Add section from the menu. Step 3: Give a name to the section and click on Add.

How to take a screenshot on Pinterest?

Note: The screenshots are taken on an Android phone but steps remain same for iPhone too. Step 1: Launch the Pinterest app and go to your profile screen by tapping on the profile picture icon at the bottom.


1 Answers

I tried triggering click event on each element and it worked perfectly for me. Couldn't try it with scroll because I don't have that many images in my board.

function checkAll() {
    console.log("Checkboxes count: " + checkBoxes.length);
    $.each(checkBoxes, function(i, v) {
        console.log("Checkbox #: " + i) // + " = " + v);
        $(this).trigger('click');
    });
}
var checkBoxes = $("div > div > div.bulkEditPinWrapper > button");
checkAll();

Let me know if it works for you.

like image 145
Abhas Tandon Avatar answered Oct 18 '22 18:10

Abhas Tandon