1

問題

Pushbullet は、Asus Nexus 7 の古いバージョンの Android が原因で発生したバグにより、デバイスを何千回も誤って追加しました。

膨大な数の削除 (それぞれ複数回のクリックが必要) は手動で行うには多すぎるため、これらのエントリをすべて(スクリプトを介して) プログラム的な方法で削除する必要があります。(そして、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 -->    
    ...

「削除」ボタンをクリックすると、「削除」ボタンが「キャンセル」ボタンに変わり、「削除」ボタンが「キャンセル」ボタンの隣の横に移動します。

アイテム/デバイスを削除するには、最初の [削除] ボタンをクリックしてから、2 番目の [削除] ボタンをクリックする必要があります。最初は「削除」ボタンのクラスは「.hover-red」ですが、クリックすると、更新された「削除」ボタンのクラスは「.red」になるため、「最初」と「2番目」と呼びます。

<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 を実行すると、適切なものがすべて選択されますが、クリックはまだ失敗するため、セレクターは正しいです。また、私のコードは常にリスト内のボタンの1つを開いたままにします(ボタンのクリックに成功し、最後にクリックされた「削除」ボタンは「削除」ボタンと「キャンセル」ボタンを一度その場所に残します)コードの実行が完了しました)。

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();

上記のコードでわかるように、私の最新の試みは、「最初の削除」ボタンをクリックしてから「2 番目の削除」ボタンをクリックするまでの間に遅延を置くことですが、これは何もしないようで、遅延はまったく機能していないようです。

自分のPushbulletアカウントを持っていない限り、「Pushbulletデバイス画面」コードを再作成することは実際には不可能であるため、これを支援するのは難しいことを知っています.私にお金を!)

4

1 に答える 1

0

私はついにこのコードを書く方法を見つけました

  1. 最初の「削除」ボタンをクリック
  2. DOM が変更されるまで 1.5 秒待ちます --> 最初のボタンのクラスと位置/CSS が変更されます
  3. 次に、新しい赤い「削除」ボタンを押します
  4. 最後に、適切な測定のためにさらに 1.5 秒待機し、プロセスを再開します。
  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();
于 2015-08-23T07:08:23.813 に答える