• 締切済み

WSHを使ってフォームに書き込みがしたい

はじめまして。 今仕事で、VBSを使って他サイトのフォームに自動的に書き込みを行うスクリプトを作成しています。 以下のようなVBSファイルを作成しています。 Set IEShell = CreateObject("Shell.Application") num = IEShell.Windows.Count For i = 0 to num - 1 WinName = IEShell.Windows.Item(i).LocationName WinPath = IEShell.Windows.Item(i).LocationURL If WinName="ウィンドウ名" Then IEShell.Windows.Item(i).document.myFORM.text.value="フォームに書き込みする内容" End If Next 予め書き込みをしたいページをIEで表示させておき、スクリプトを実行すると自動的にフォームに書き込みを行うスクリプトを作成しました。 上記のスクリプトで上手く行きました。ですがもし書き込み先のページがフレームを使っていた場合どうしてもエラーが出てしまいます。 以下のような方法も試しましたがどうしても上手くいきません。 IEShell.Windows.Item(i).parent.frame1.document.myFORM.text.value="フォームに書き込みする内容" IEShell.Windows.Item(i).top.frame1.document.myFORM.text.value="フォームに書き込みする内容" 上記のようにparentやtopなども使ってみたんですがどうやってもエラーが出てしまいます。誰がわかる方いらっしゃいましたら助けてください。宜しくお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>フレームに対してのみセキュリティー上書き込みが出来ないようにするとは考えにくいと思うんですが... フレームというか、ドメインの異なるアドレスのページだからだと思います。試してはいないんですけど、同一ドメインのページをフレーム表示する場合は、できるんじゃないかと(?) 例えば、 IEShell.Windows.Item(i).document.frames.length とすれば、フレームがいくつあるか調べることができます。 IEShell.Windows.Item(i).document.frames(1).name のようにローカルなフレームの場合フレームの名前を表示する(読み出す)ことができますが、 #3の補足のような場合は、「アクセスが拒否されました」と表示されますので、プログラム上できないのではなくセキュリティ上できないのだとわかります。 それは、javascriptなどを使ってフレーム(とか別ウィンドウ)にアクセスする場合も同じなので、1つのサイトのIEオブジェクトでアクセスできても、(フレーム云々ではなく)2つのサイトのIEオブジェクトではアクセスできないのは、IEとしての動作は同じです。

WMC
質問者

お礼

やはり無理でしたか、 いろいろ有難うございました。とっても参考になりました^^他の方法も考えて見ます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>エラー: 書き込みできません。:'IEShell.Windows.Item(...).document.frames(...).sf1' こちらでも試してみました。 frameに関して、内容の読み出し、書き込みはセキュリティ上の理由からできないようです。 (つまり同一ドメインからのアクセスでないといけない) これは、IEの動作とも合致するので、当然といえば当然ですね。

WMC
質問者

補足

そうですか~色々有難うございます。 僕もセキュリティー上の問題で出来ないのかと思いましたが、フレームを使わない場合は問題なく書き込むことができます。 フレームに対してのみセキュリティー上書き込みが出来ないようにするとは考えにくいと思うんですが...

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>やはりエラーが出てしまいます。 どういう状況なのかもう少し詳しく教えてください。 ~~したけど~~というエラーがでるとか ~~したあと~~すると、~~できないとか エラーがでてしまいますと言われても、よくわかりません。 対象のウインドウが遷移したということでしょうか??

WMC
質問者

補足

はい対照のウィンドウに表示してるページがローカルPCにあるファイルではなくサーバーにあるページに書き込もうとするとエラーがでます。 たとえば下記のようにメモ帳でHTMLソースを記載しデスクトップなどに保存したページに書き込みをしようとすると上手くいきます。 <frameset cols="20%,80%"> <frame name="frame1" src="frametest.html"> <frame name="frame2" src="frametest2.html"> </frame> ですが下記のように全く別のサイトのフォームには書き込みができません。 <frameset cols="20%,80%"> <frame name="frame1" src="http://www.google.co.jp"> <frame name="frame2" src="http://www.yahoo.co.jp"> </frame> エラーの内容に関しては、たとえばヤフーの検索する部分に書き込もうとする場合 IEShell.Windows.Item(i).document.frames("frame2").sf1.p.value 上記のように記載すると スクリプト: C:\Documents and Settings\デスクトップ\frametest.vbs 行: 8 文字: 1 エラー: 書き込みできません。:'IEShell.Windows.Item(...).document.frames(...).sf1' コード: 800A0046 ソース: Microsoft VBScript 実行時エラー このようなエラーが出てしまいます。 ですがフレームを使わずに下記のようにすると、ヤフーのような別サイトでも書き込みができます。 IEShell.Windows.Item(i).document.sf1.p.value 上記のとうりです。ご迷惑かけて申し訳ございませんが、宜しくお願いします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1です。すみません#1は、間違いでした。 調べてみたところ IEShell.Windows.Item(i).document.frames("frame1").myFORM.text.value="フォームに書き込みする内容" でできます。

WMC
質問者

補足

ご回答ありがとうございます。 確かにframes("frame1")で出来ました。 ですが書き込み対象のページがhttp:~から始まる別サイトになるとやはりエラーが出てしまいます。 何かいい方法はないでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

試してないので自信ないですが IEShell.Windows.Item(i).Frame("frame1").document.myFORM.text.value="フォームに書き込みする内容" でできないですかね