下記ページのチェックボックスにチェックを入れ、送信するスクリプトを教えてください。

下記の方法ですと、チェックまでは入るのですが、その後、手動でクリックしても、正常に送信できません。何か、他にも、調べているのかもしれません。適当に推測してエスパー的な回答を期待します。
また、中断1,2のどちらを試してもうまくいきません。こちらも併せて教えてください。

宜しくお願い致します。


==http----------text.html==
<form action="test.cgi" method="post" name="" id="">
<input name="testA" type="checkbox" value="" id="tA" onclick="if (this.checked) { this.form['testA'].value='40'; }else{this.form['testA'].value=''; } if (this.checked) { this.form['testXXXXA'].value='40'; }else { this.form['testA'].value=''; } " /><label>TEST-A</label>
<input type="submit" name="send_name" value="send">
</form>


==perlスクリプト==
use Win32::OLE;
$IE = Win32::OLE->new('InternetExplorer.Application');
#見えるor見えない
$IE->{Visible} = $visible;
$IE->Navigate( 'http----------text.html' );

# 途中省略

$testa = $ie->document->getElementById("testA"); $testa->{checked} = "true";

exit;##中断1
$IE->document->submit();

exit;##中断2
$btn = $IE->document->getElementById("send_name");
$btn->click();

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/12/29 02:42:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント80pt

(原因)クライアントサイドスクリプトが起動していないのが原因と思われる。

$testa = $ie->document->getElementById("testA");

$testa->{checked} = "true";

上記では、オブジェクトに値を入れただけなので

onclickに記述されているスクリプトは起動していない。


(対応)スクリプトを起動させたいならばオブジェクトをclickする。

$testa = $ie->document->getElementById("testA");
$testa->{checked} = "";
$testa->click();

チェックボックスはトグル(クリックする度にオンとオフが切り替わる)なので、

一度内容を空白にしておいてから、クリックするという手間をかけている。

チェックボックスの中身が必ず空白と決まっているのであれば、

checked=""にする必要は無いが、念のためいれておくと安心。

id:TREEG

回答いただきありがとうございます。

無事動作致しました!

$IE->document->submit();

についてはいかがでしょうか?

2009/12/29 01:20:01
  • id:kn1967
    訂正
    × $ie->
    ○ $IE->
  • id:TREEG
    コメント頂きありがとうございます。
    いまいち、javascriptやOLEの使い方を理解していませんのでローカルな環境ですし(適当に組み合わせて使っているだけ)、とんちんかんなことを言っていましたらご了承ください。
    実際は、
    <input name="testA" の次には、
    <input name="testB" という感じで続きますので、とりあえず、先ほどのチェックさせる部分は、ループさせています。
    そして、最後に、
    my $s = $IE->document->getElementById("send_name");
    $s->submit();
    か、
    my $s = $IE->document->submit();#例のソースはmy $s =が抜けていました
    という感じで、いままでチェックした物を送信したいのですが、うまくいきません。
    なお、アドバイスのおかげで、手動でクリックするところまではうまくいきました。
  • id:kn1967
    OLEオブジェクトの使い方は確かに面倒ですね。
    私のテスト環境もそちらに合わせてみました。
    送信は
    my $s = $IE->document->getElementsByTagName('form')->{0}->submit;
    もしくは
    my $s = $IE->document->getElementById("send_name");
    $s->click();
    になります。

  • id:TREEG
    ありがとうございます!
    無事解決致しました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません