选择Pinterest上的所有图像以移动到另一个板

Eri*_*010 9 javascript ajax jquery reverse-engineering pinterest

更新:(2015-10-16)[已解决!] - 使用trigger()和限制为50个引脚(使用slice())进行修复.

非常感谢Abhas Tandon通过使用提出这一点

$(this).trigger('click');
Run Code Online (Sandbox Code Playgroud)

代替

$(this).addClass('selected');
Run Code Online (Sandbox Code Playgroud)

它会正确选择图像.我测试了一个由21个图像组成的板,它工作得很完美!但是,当试图移动300多个引脚时,它失败并出现此错误:

"You can only move 50 Pins at a time." 
Run Code Online (Sandbox Code Playgroud)

然后,我通过使用JavaScript的slice()函数来获取前50个图像,从而解决了这个问题.经过测试,现在可以正常使用.所以我的目标是,我一次只能选择并移动50个针脚,但这比用手一个一个地挑选它们要好得多!


最终工作代码:

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();
Run Code Online (Sandbox Code Playgroud)




问题描述:

我正在开发一个Pinterest接口(?)脚本(?)有些麻烦.我是一名程序员,大多是自学成才,我想我可能缺少一些关于AJAX理解的关键部分?这是我第二次尝试编写一个jQuery脚本来与Pinterest进行交互.第一个尝试打败无限滚动功能(AKA"加载更多"按钮),以便将所有图像显示在一个页面上,我可以从中抓取图像链接,然后使用浏览器插件下载它们以备份我的Pinterest登上我的电脑.我的代码全部工作,除了它实际上没有下载任何图像.

失望,我把它暂时放在了其他的东西上.最后,我重新访问了我的代码并进行了一些挖掘,它应该有效.我的研究表明,可能阻止我的程序做我想做的关键FLAW就是"Pinterest使用AJAX".虽然我知道"使用XML的异步JavaScript"和"XMLHttpRequest"这两个术语,但我在实施AJAX方面并不是一个专家.

使用我的最新代码,我写了一个 - 你会认为它会是 - 快速的小jQuery脚本来选择所有图像,以便我可以移动它们,删除,复制等...问题是,虽然检查所有的框工作(你必须在一个板子,然后点击"移动"),当我第二次点击"移动"按钮时,应该弹出一个模态让我们选择要移动到哪个板,我得到的只是

Oops!
Select the Pins you want to move.
Run Code Online (Sandbox Code Playgroud)


使用:

  • Chrome 45.0.2454.101
  • Windows 8.1 64位


如何重现问题:

  1. 在笔记本电脑或台式电脑上登录您的Pinterest帐户.
  2. 选择一块电路板或从头开始构建测试板(这样就不会丢失任何当前的插针).
  3. 点击右上角的"移动".这将使透明复选框显示在每个图像的右上角.注意:Pinterest会显示未选中的复选框,其中已有复选标记.你知道一个盒子的方式是它保留了复选标记,盒子背景变成了实心(不再透明)红色.
  4. 在浏览器中启动开发人员工具控制台(Firefox/Chrome:F12).
  5. 将以下脚本添加到浏览器中的JavaScript控制台.
  6. 运行脚本.如果它"有效",您应该看到所有复选框现在都是红色的.
  7. 再次单击"更多"按钮.现在,您将获得"选择要移动的引脚".消息,表明实际上,所有选择都不起作用.

注意:我现在并不关心分页,但如果有人想解决这个问题,我也会对这个问题的解决方案持开放态度.


脚本选择所有图像:

/* 
   @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();
//});
Run Code Online (Sandbox Code Playgroud)


我试图修复它的是什么:

  1. 用Google搜索解决方案.我发现了以下文章.最后一个似乎可能就是我需要的东西,但它似乎没有足够重视我的问题.

  2. 最初尝试将每个复选框的"已检查"属性设置为"true",但它最终没有检查框(为什么??).但是,我在浏览器控制台中观察到,当我点击选择图像时,"选定"类被应用于该图像.所以,我使用addClass()将该类应用于我的代码中的所有复选框,并且我能够正确选择所有复选框,然后......或者看起来如此.

  3. 我通过调用$(document).ready来尝试代码,但它给了我错误

    "Uncaught ReferenceError: checkBoxes is not defined(…)"
    
    Run Code Online (Sandbox Code Playgroud)


我花了很长时间来格式化这个......感谢您的帮助.我很高兴澄清是否有任何不清楚的地方.另外,如果此帖子属于其他论坛,请告诉我.谢谢.

Abh*_*don 1

我尝试click在每个元素上触发事件,它对我来说非常有效。无法尝试滚动,因为我的板上没有那么多图像。

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();
Run Code Online (Sandbox Code Playgroud)

请让我知道这对你有没有用。