Userscriptによる自動化

こんにちは、Habr!



エントリー


多数のUserscriptとjQueryを使用して、お気に入りのサイトまたはあまり好きではないサイトでのアクションを自動化するという個人的な発見と共有したいと思います。 私はこのコンテストの1つのポータルに参加しています。提案の1つは、最も積極的に投票するユーザーになるための受賞者になることです。



解決策


小さなデスクトップアプリケーションを作成することもできます(C#で良い経験があります)が、これには時間がかかり、できるだけ早く問題を解決する必要があります。 Userscriptが私の助けになり、ページに関数を埋め込み、実行できるようになりました。

正規表現(標準のRegEx関数)に関する問題を回避するために、jQueryライブラリを使用し、基本的なJavaScript関数をページに導入しました。

 var head = document.getElementsByTagName('head')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.src= 'http://code.jquery.com/jquery-latest.js'; head.appendChild(script);
      
      





次のステップは、投票ボタンを決定することでした:

 <tr> <td> <a href="#"><span></span></a> </td> <td> <span> :</span> </td> <td> <div id="thumbs_up"> <img src="thumbs_up.png" onclick="vote('UnicID', '1');" alt=""> </div> </td> <td align=center width=20px> <div id="mess_ratio_UnicID"> <span><b></b></span> </div> </td> <td> <div id="thumbs_down"> <img src="thumbs_down.png" onclick="vote('UnicID', '-1');" alt=" "> </div> </td> <td> <div id="vote_status_UnicID"> <span></span> </div> </td> <td> <span>  </span><span></span> </td> </tr>
      
      





投票ボタンは、「thumbs_up.png」または「thumbs_down.png」という画像を含む画像で、完全に悪い男の子であると判断し、すべての出版物を除外することを選択しました。 したがって、彼は高い評価を下げ、投票なしで出版物を「殺し」、マイナスの評価を導入しました。



次のコードを呼び出すことにより、ページ上のすべての出版物に(より正確に、反対に)投票が行われました。

 jQuery('img[src*=thumbs_down]').click();
      
      





それから私はサイトを走り回り、各投票を監視しました。



問題


翌日、フォーラムの誰かが悪意のある評価者について行政に不満を言いました。 同じペースで参加を続けることは不可能であり、彼らは突然ブロックされました。 状況を過大評価していたので、自動投票をやり直し、各出版物の現在の評価を決定することにしました。 条件は次のとおりです。

1)評価がゼロまたはゼロ未満の場合、+ 1を投票します。

2)評価がゼロより大きい場合、-1を投票します。



タスクは同じで、正規表現使用しませんでした 。 彼はjQueryのドキュメントに興味を持ち、新しい関数「.not()」、「:contains()」、「。has()/:has()」を明らかにしました。

カットされたHTMLコード(上記を参照)を確認し、式を修正した後、次のコードを受け取りました。

 jQuery('img[src*=thumbs_down]').parent().parent().parent().not(" tr:has(span:contains('MyNick'), b:contains('-'), b:contains('0') )").find('img[src*=thumbs_down]').click(); jQuery('img[src*=thumbs_down]').parent().parent().parent().has(" span:contains('MyNick'), b:contains('-'), b:contains('0') ").find('img[src*=thumbs_up]').click();
      
      





だから、順番に:

最初のjQueryクエリ

  1. 投票写真の検索[jQuery( 'img [src * = thumbs_down]')]
  2. 次に、親を3回ジャンプして、評価と投票ボタンの最も近い共通の親に到達します。これはTRブランチです[.parent()。parent()。parent()]
  3. 結果からフィルターアウトすると、次のことがわかりました。

    a)またはニックネームの付いたspanタグを含まない ;

    b)またはマイナスの評価を持つタグ「b」を含まない

    c)または評価がゼロのタグ「b」が含まれていない

    [.not(“ tr:has(span:contains( 'MyNick')、b:contains( '-')、b:contains( '0'))”]
  4. 反対票ボタンを見つけてクリックします[.find( 'img [src * = thumbs_down]')。クリック()];


2番目のjQueryクエリ

  1. 投票写真の検索[jQuery( 'img [src * = thumbs_down]')]
  2. 次に、親を3回ジャンプして、評価と投票ボタンの最も近い共通の親に到達します。これはTRブランチです[.parent()。parent()。parent()]
  3. 結果からフィルターアウトすると、次のことがわかりました。

    a)または私のニックネームを持つspanタグを含む;

    b)または評価がマイナスのタグ「b」を含む。

    c)または評価がゼロのタグ「b」を含む。

    [.has( "span:contains( 'MyNick')、b:contains( '-')、b:contains( '0')„)]
  4. 正の投票ボタンを見つけてクリックします[.find( 'img [src * = thumbs_up]')。クリック()];


まとめ


怠が進歩の原動力であることをもう一度確認し、評価を使用して自動化され最小化された自動投票を行い、jQueryの新機能を学習しました。 このような単純で読みやすい関数を使用すると、if-else条件の多くの行を回避できます。



All Articles