问题

由于我的华硕Nexus 7上的Android版本过旧而导致的一些错误,Pushbullet错误地将该设备添加了数千次。

我需要以编程方式(通过脚本)删除所有这些条目,因为删除的绝对数量(每次都需要多次单击)实在太难于手动执行了。 (而且我已经联系了Pushbullet,但他们无济于事-没有牛肉。说真的,我完全理解。PushBullet也很棒。)



Pushbullet的设备列表页面上的代码

最初,我需要单击的按钮如下所示:

  <table class="crud" style="width:100%;white-space:nowrap">
    <tr>
      <td><input type="text" placeholder="nickname" value="Sony D5803" name="nickname" onchange="window._handler[12].apply(null, arguments);" onblur="window._handler[13].apply(null, arguments);" onkeypress="window._handler[14].apply(null, arguments);" /></td>
      <td>added 6 days ago</td>
      <td><button class="hover-red" onclick="window._handler[15].apply(null, arguments);">Delete</button></td>
    </tr>

    <tr>
      <td><input type="text" placeholder="nickname" value="Firefox" name="nickname" onchange="window._handler[20].apply(null, arguments);" onblur="window._handler[21].apply(null, arguments);" onkeypress="window._handler[22].apply(null, arguments);" /></td>
      <td>added 4 months ago</td>
      <td><button class="hover-red" onclick="window._handler[23].apply(null, arguments);">Delete</button></td>
    </tr>

    <-- I need to delete THESE entries below -->
    <-- I need to delete THESE entries below -->
    <-- I need to delete THESE entries below -->
    <tr>
      <td><input type="text" placeholder="nickname" value="Asus Nexus 7" name="nickname" onchange="window._handler[28].apply(null, arguments);" onblur="window._handler[29].apply(null, arguments);" onkeypress="window._handler[30].apply(null, arguments);" /></td>
      <td>added 6 months ago</td>
      <td><button class="hover-red" onclick="window._handler[31].apply(null, arguments);">Delete</button></td>
    </tr>

    <tr>
      <td><input type="text" placeholder="nickname" value="Asus Nexus 7" name="nickname" onchange="window._handler[32].apply(null, arguments);" onblur="window._handler[33].apply(null, arguments);" onkeypress="window._handler[34].apply(null, arguments);" /></td>
      <td>added 6 months ago</td>
      <td><button class="hover-red" onclick="window._handler[35].apply(null, arguments);">Delete</button></td>
    </tr>
    <-- I need to delete THESE entries above -->
    <-- I need to delete THESE entries above -->
    <-- I need to delete THESE entries above -->
    ...


单击“删除”按钮后,将使用“取消”按钮代替“删除”按钮,并且将“删除”按钮移到旁边的“取消”按钮旁边。

为了删除项目/设备,我需要它单击第一个“删除”按钮,然后单击第二个“删除”按钮。我将它们称为“第一”和“第二”,因为最初“删除”按钮具有类“ .hover-red”,但是单击它后,更新的“删除”按钮具有类“ .red”,如下所示:

<tr>
    <td><input type="text" placeholder="nickname" value="Asus Nexus 7" name="nickname" onchange="window._handler[32].apply(null, arguments);" onblur="window._handler[33].apply(null, arguments);" onkeypress="window._handler[34].apply(null, arguments);" /></td>
    <td>added 6 months ago</td>
    <td>
<-- this is what the button code changes to once clicking a "Delete" button -->
        <button class="red" onclick="window._handler[39].apply(null, arguments);">Delete</button>
        <button class="gray" onclick="window._handler[40].apply(null, arguments);">Cancel</button>
    </td>
</tr>




到目前为止我尝试过的

我尝试了许多脚本,其中一些更简单,更复杂,但似乎没有一个起作用。到目前为止,这给出了最好的结果。它单击按钮(尽管我不能说出顺序),但不会删除任何条目。这段代码被限制为5个条目,因为当我执行整个列表时,它会持续5分钟而没有结果-至少这样,我很快就发现它不起作用。

我的选择器是正确的,因为当我执行console.logging时,所有正确的东西都被选中,但是单击仍然失败。还要注意,我的代码始终使列表中的按钮之一保持打开状态(例如,它成功单击了按钮,最后单击的“删除”按钮将“删除”按钮和“取消”按钮放在其位置一次)该代码已完成运行)。

function deleteAsus() {
    var n;
    $('.crud input[value="Asus Nexus 7"]').each(function(){
        n++;
        if (n =< 5) {
            //console.log(this); //works!
            //console.log($(this).parent().parent().find('.hover-red')); //works!
            //console.log($(this).parent().parent().find('.red')); //works!
            $(this).parent().parent().find('.hover-red').click().delay(3000).parent().parent().find('.red').click();
            //$(this).parent().parent().find('.red').click();
        } else {
            return;
        }
    });
}
deleteAsus();


如您在上面的代码中看到的,我的最新尝试是在单击“第一个删除”按钮和“第二个删除”按钮之间设置延迟,但这似乎无济于事,并且延迟甚至根本没有起作用。

我知道很难解决此问题,因为除非您拥有自己的Pushbullet帐户,否则实际上不可能重新创建“ Pushbullet设备屏幕”代码,因此,如果有什么办法可以帮助您,请让我知道(并显示给我钱!)

最佳答案

我终于想出了一种方法来编写此代码


点击第一个“删除”按钮
等待1.5秒让DOM更改->第一个按钮的类和位置/ CSS更改
然后按下新的红色“删除”按钮
最后,它会再等待1.5秒以取得良好效果,然后重新启动该过程
这将继续进行,直到删除所有重复名称的设备为止。


正如我们所说的,它正在删除重复的设备(每3秒1个)。我刚开始时的总人数是1420,而当我键入此数字时,我下降到大约1300。

代码:

var assNex7 = $('.crud input[value="Asus Nexus 7"]');
var n = 0;
function clickRed() {
    n++;
    setTimeout(function() {
        $('.red').click();
        setTimeout(function() {
            deleteDevice();
        }, 1500);
    }, 1500);
}
function clickDelete() {
    $('.crud input[value="Asus Nexus 7"]').eq(0).parent().parent().find('.hover-red').click();
    clickRed();
}
function deleteDevice() {
    if (n < assNex7.length) clickDelete();
}
deleteDevice();

关于javascript - 控制台脚本可触发3,000多次连续的启用点击的前端操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31758692/

10-10 00:25