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

时间:2015-10-15 21:30:49

标签: javascript jquery ajax reverse-engineering pinterest

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

非常感谢Abhas Tandon使用

提供此功能
$(this).trigger('click');

而不是

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

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

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

然后,我通过使用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();



问题描述:

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

失望,我暂时停下来专注于其他事情。最后,我重新访问了我的代码并进行了一些挖掘,它应该有效。我的研究表明,可能阻止我的程序做我想做的关键FLAW就是“Pinterest使用AJAX”。虽然我知道“使用XML的异步JavaScript”和“XMLHttpRequest”这两个术语,但我在实施AJAX时并不是专家。

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

Oops!
Select the Pins you want to move.


是:

  • Chrome 45.0.2454.101
  • Windows 8.1 64位


如何重现问题:

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


    脚本选择所有图像:

    /* 
       @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();
    //});
    


    我试图修复它的所有内容:

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

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

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

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

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

1 个答案:

答案 0 :(得分: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();

让我知道它是否适合你。