3

私は Perl の初心者で、これまでに 3 つまたは 4 つのスクリプトを作成したと言わざるを得ません。Perl は非常に理解しやすく、使いやすいと思います。

とにかく、現在のスクリプトに問題があります。私はしばらくこの問題に悩まされていましたが、修正が見つからないようです。

特定の Web サイトをたどった後、2 つのラジオ ボタンの間をクリックしてダウンロード ボタンをクリックするページに行きました。

いずれかのボタンを選択してダウンロードをヒットするようにスクリプトを取得する必要がありますが、ページのソースは、使用時にラジオ ボタンを設定する値を提供しませんWWW::Mechanize

以下は、Web ページのソースの一部です。

<input type='radio' onclick="url('URL GOES HERE')">

2 つのボタンについては、これでほぼ完了です。1つを選択してソースを見ると、コードが次のように変わることに気付きました

<input type='radio' checked onclick="url('URL GOES HERE')">

それでもWWW::Mechanize、値に何を入れればよいかわからないため、自動的に設定することはできません。oncheckedonclicktruechecked onclick、を試しましたがselectselected役に立ちませんでした。

これに関連するコード行は次のとおりです

$mech->set_visible([radio => 'checked onclick']);

ここでも初めて、どんな助けでも大歓迎です。

今のところ、多くの制限がある職場のコンピューターで作業していることを忘れていました。そのため、コンピューターに Firefox または Selenium Server をインストールできません。

編集

私が抱えているかもしれない問題は、これが JavaScript にある可能性があることだと思います。私は HTML についてあまり知識がありませんが、見出しのどこかに JavaScript が表示されるまで、ソース コードは同じように見えましたか? WWW::Mechanizeとにかく、 JavaScript を実際にはサポートしていないことを思い出したので、これが問題なのかもしれません。

返信ありがとうございます。本当に感謝しています。しかし、いろいろ調べて慎重に調べた結果、上司と私は、すべてのダウンロード リンクが非常に似ていることに気付きました。実際に必要なのは、スクリプトをカスタマイズしてダウンロードへのリンクを作成することだけです。複数の Web ページをたどる手間。もっと早くこれを見たかった。

4

3 に答える 3

1

HTML::Formは、名前のないラジオ ボタンをアクティブにする API を提供しません。内臓を掘り下げることで、特徴的な属性を読み取ることができます。これはうまくいくはずです(ほとんどテストされていません):

use WWW::Mechanize qw();
my $w = WWW::Mechanize->new;
$w->get('file:///tmp/so11767998.html');
for my $input (($w->forms)[0]->inputs) {
    $input->check if q{url('URL GOES HERE')} eq $input->{onclick}
}
于 2012-08-02T12:31:53.977 に答える
0

ブラウザの GUI でラジオ ボタンを選択した後に何が起こるかを確認する必要があります。これには 2 つの方法があります。

  1. url() Javascript サブルーチンを確認できます

  2. または、ターゲット フォームを送信した後にブラウザ リクエストを記録することもできます。

これには、Firefox の HTTPFox 拡張機能を使用することをお勧めします。したがって、入力を選択し、HTTPFox でセッションを開始し、フォームを送信するだけです。次に、POST (または GET) されたデータを確認し、Mechanize スクリプトで同じフィールドを複製します。何かのようなもの:

$mech->submit_form(
    form_name => "form_name",
    fields => {
        input1_name => "value1",
        input2_name => "value2",
.....
    },
);
于 2012-08-02T05:31:07.773 に答える
-1

私もこの問題を抱えており、Javascript を呼び出してラジオ ボタンをクリックすることで解決しました。

$mech->eval_in_page('document.getElementById("id_radiobutton").checked = true;');

これは私にとってはうまくいきました。

于 2016-10-28T02:34:36.613 に答える