Perl で自動サイト アクセスを行う場合、テキスト形式の確認コードを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2331956

質問

Win32::IE:Mechanize をいじって、認証が必要なサイトに自動的にアクセスしようとしています。これまでのところ、私はある程度の成功を収めています。たとえば、yahoo メールボックスに自動的にログインできるようになりました。しかし、多くのサイトが、おそらく CAPTCHA と呼ばれる、ある種の画像検証メカニズムを使用していることがわかりました。私は彼らに何もできません。しかし、自動アクセスしようとしているサイトの 1 つは、プレーンテキストの確認コードを使用しています。4 桁の数字で構成されており、選択およびコピーが可能です。ただし、それらはソースファイルには含まれていないため、次を使用して取得できます

$mech->content;

Web ページには表示されるが、ソース ファイルには表示されないキーワードを、インターネット一時ファイル内のすべてのファイルで検索しましたが、まだ見つかりません。

何が起こっているのかわかりますか?認証コードが何らかの Cookie ファイルに隠されているのではないかと疑っていましたが、見つからないようです:(

以下は、検証コードを除くすべてのフィールド要件を完了するコードです。

use warnings;
use Win32::IE::Mechanize;

my $url = "http://www.zjsmap.com/smap/smap_login.jsp";
my $eccode = "myeccode";
my $username = "myaccountname";
my $password = "mypassword";
my $verify = "I can't figure out how to let the script get the code yet"

my $mech = Win32::IE::Mechanize->new(visible=>1);
$mech->get($url);
sleep(1); #avoids undefined value error
$mech->form_name("BaseForm");
$mech->field(ECCODE => $eccode);
$mech->field(MEMBERACCOUNT => $username);
$mech->field(PASSWORD => $password);
$mech->field(verify => $verify);
$mech->click();

いつものように、提案/コメントは大歓迎です:)

アップデート

この問題を解決するあまり賢くない方法を考え出しました。以下に投稿した私自身の回答にコメントしてください。いつもありがとう:)

役に立ちましたか?

解決 4

james2vegas、zoulとShobanに感謝します。

私は最終的に自分自身のAそれほどスマートけど、私はここで説明する問題を解決するために、少なくとも、実行可能な方法で考え出しました。私はここでそれを共有したいと思います。私は、@ james2vegasによって提案されたアプローチは、はるかに良いだろうと思い...とにかく、私は道に沿って勉強しています。

は私のアプローチはこれです 検証コードは、ソースファイルではありませんが、それはまだ選択してコピー可能であることから、

、私は、ログインページで私のスクリプトのコピーすべてを聞かせた後、確認コードを抽出することができます。

これを行うために、私は、ログインページに「すべて選択」と「コピー」を行うことのWin32 :: GuitestモジュールでのSendKeys関数を使用します。

それから私は、Win32を使用します。クリップボードは、クリップボードの内容を取得し、その後、正規表現は、コードを抽出します。このような何かます:

$verify = Win32::Clipboard::GetText();
$verify =~ s/.* (\d{4}).*/$1/msg;

いくつか考えます:

乱数はPerlで、このような何かによって生成されます     私の$ RANDOM_NUMBER = INT(RAND(8999))+ 1000; #var RANDOM_NUMBER =ランド(1000,10000)。 そして、それを確認$場合== $のRANDOM_NUMBERを確認します。私は$ RANDOM_NUMBERオンリーワンのセッションの値をキャッチする方法がわかりません。私はそれがメモリのどこかに保存されていると思います。私は値を直接取り込むことができれば、私はこれを使用するので、多くの手間と余分なモジュールに行っていないでしょう。

他のヒント

これは、彼らがそこにいる理由です。自動化されたものを行うためにあなたのような停止プログラムに; - )

  

A CAPTCHAまたはキャプチャは、の一種であります   で使用されるチャレンジ・レスポンステスト   応答することを確実にするために、コンピューティング   コンピュータによって生成されていません。

このは無関係な数であるように思われます。ページには、3ヶ所でそれを使用しています。それを生成します。そのための入力フィールドに次のフォームに表示します。入力値のチェックは、選択された乱数に等しいです。つまり、それはクライアントのみのチェックです。私は推測している、ように見えるあなたJavaScriptを無効場合でも、重要なクッキーはセットを得ることはありません。あなたは(あなたがgetメソッドの呼び出しとJavaScript URIとすることができるはずです)ページのコンテキストでJavaScriptを実行できる場合は、f.e.にRANDOM_NUMBERの値を変更することができます42及び充填その形にした。

コードはJavaScriptによって挿入された - 無効JS、ページをリロードし、それが消えて参照してください。あなたはそれが来ると、それを複製する方法のアイデアを得るために、JSのコードを狩りにしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top