javascriptの操作について
未読分:8件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#8 2015年3月9日(月)18時07分 From: VBAマスター | 返事 削除 変更 |
setTimeoutで非同期処理するのはブラウザの処理との非同期って形ですよね。 ですので、 IE.document.Script.setTimeout "javascript:document.getElementById(" & id & ").click()", 100 の処理と <script language="JavaScript"><!-- //PDF表示確認POPUP function pdf(url) { a=confirm('PDFを表示します。'); if(a) location.href='a.pdf'; else alert('なにもしません'); } // --></script> は別処理で後者の方は非同期処理されないので、どちらにせよ、クリック処理ができたとしても次へは進めない気がしますが。 とりあえず IE.document.Script.setTimeout "javascript:document.getElementById(" & id & ").click()", 100 が動かないということですが、これはidがそのまま変数になっているので""がたりてないですね。 やるなら、以下のように""でidを括って文字列にしないとだめです。 一応こっちで動作確認しましたが、ポップアップ画面が表示されました。 IE.document.Script.setTimeout "javascript:document.getElementById(""" & id & """).click()", 100 |
Message#7 2015年3月5日(木)17時54分 From: ぶーたん | 返事 削除 変更 |
VBAマスターのメッセージ(#6)への返事 ファイル名を取得する方法ありがとうございます。 とても参考になりました。 dim id as strign id="popOK" IE.document.Script.setTimeout "javascript:document.getElementById(" & id & ").click()", 100 の部分はサブルーチン化を考えており、 AJAX等で動的にページを書き換えるサイトにも応用できそうなので、 変数に入れられるととても便利だと思うんですが如何でしょうか。 引き続きよろしくお願いいたします。 |
Message#6 2015年3月5日(木)16時47分 From: VBAマスター | 返事 削除 変更 |
今から外出するので簡単に回答します(汗) ↓こちらが今回のクリック処理でjavascriptが利用されています。 <input type="submit"value="OK"class="bt2"id="popOK"onclick="return pdf();"> そして、pdf()の処理を見ると <script language="JavaScript"><!-- //PDF表示確認POPUP function pdf(url) { a=confirm('PDFを表示します。'); if(a) location.href='a.pdf'; else alert('なにもしません'); } // --></script> になっています。 処理内容を見るとpopメッセージをした後にpdfファイルのURLへ移動するってことなんで、 クリック処理せずにこのpdfファイルの名前を取得してからnavigateメソッドで読み込めばクリックしなくても処理ができるかと思います。 ファイル名を取得するにはMid関数・Instr関数あたりを利用すればそんなに難しくないでしょう。 もう1つは、クリック処理したあとにsendkyesステートメントでEnterキーを直接送信させる処理です。 この場合は、Enterキーを少しばかり処理をとめてから行うとうまくいくと思います。 |
Message#5 2015年3月5日(木)00時25分 From: ぶーたん | 返事 削除 変更 |
ぶーたんのメッセージ(#4)への返事 すみません、2箇所訂正です。 ×Do While IE.Busy = True Or objIE.ReadyState <> 4 ○Do While IE.Busy = True Or IE.ReadyState <> 4 × ’IE.document.Script.setTimeout "javascript:document.getElementById(popOK).click()", 100 ○ ’IE.document.Script.setTimeout "javascript:document.getElementById(""popOK"").click()", 100 よろしくお願いします。 |
Message#4 2015年3月5日(木)00時13分 From: ぶーたん | 返事 削除 変更 |
ご回答ありがとうございます。 説明が不足しておりました。 クリック対象のボタンやリンクにjavascriptのconfirm関数がついていて そこからポップアップでメッセージが出てきた場合、 処理がそこで止まってしまいます。 そのために非同期処理の必要がありjavascriptを VBAからsettimeoutで呼び出した次第です。 同期していると、そのあとのポップアップのOKボタンがVBAで押せません。 ※こちらはクリックイベントがOKボタンに登録されている場合ですが、 以下のページのような場合です。 http://kamicha1.web.fc2.com/Excel/Test20090726.html 最初に質問させていただいた際に書いた、スクロールの コードはjavascript内に変数を渡せていましたが、 私が書いたものは変数を入れても動きません。 変数を入れたほうが汎用性があがるので、 そうった旨でご質問させていただきました。 分かりにくく申し訳ありません。 他の部分に問題は無いと思うんですが、 一応コード記載させていただきます。 Sub ieTest() dim IE as object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate "http://kamicha1.web.fc2.com/Excel/Test20090726.html" Do While IE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop ’これは問題なく動く ’IE.document.Script.setTimeout "javascript:document.getElementById(popOK).click()", 100 dim id as strign id="popOK" IE.document.Script.setTimeout "javascript:document.getElementById(" & id & ").click()", 100 ’PostMessage関数かsleep関数+sendkeyメソッドどちらかで、 'ポップアップのOKをクリック end sub 改めてよろしくお願いします。 |
Message#3 2015年3月4日(水)22時45分 From: VBAマスター | 返事 削除 変更 |
javascriptの勉強でクリック処理がしたいということですか? 単にクリック処理がしたいのなら、IEのClickメソッドを利用するのが一番はやいですよ。 Test="hoge" IE.document.getElementById(Test).click 後は、処理前後の内容に間違いがないかHTMLソースにhogeが複数存在していないかなどの確認が必要ですね。 仮にidの"hoge"が2つあった場合は一番最初に処理されるので、2番目をクリックしたい場合はこちらの処理でうまくいきません。 |
Message#2 2015年3月3日(火)17時30分 From: 通りすがり | 返事 削除 変更 |
一部だけ載せてもどの部分が悪いのかわからんだろ・・・ しいていえばjavascriptでクリックする必要もないかと。 だってVBAでクリックすればいいだけだから! |
Message#1 2015年3月3日(火)00時12分 From: ぶーたん | 返事 削除 変更 |
いつも参考にさせていただいております。 javascript操作のサンプルにあるように以下のコードは動きます。 dim high as long high = "IE.document.body.scrollheight" IE.document.Script.setTimeout "javascript:scrollTo(0," & high & ")", 100 しかし、以下のコードは動きません。 dim Test as string Test="hoge" '※存在するID IE.document.Script.setTimeout "javascript:document.getElementById(" & Test & ").click()", 100 どうすれば動くか教えてください。 よろしくお願いします。 WINDOWS7 EXCEL2013です。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降