[ruby-list:49967] Re: [質問] RubyからIE操作 ie.Document.All.???.click

From: MasakiSuketa <masaki.suketa@...>
Date: 2014-09-11 13:51:24 UTC
List: ruby-list #49967
助田です。

On Thu, Sep 11, 2014 at 02:00:06PM +0900, yamataka@u08.itscom.net wrote:

> 助田さんのご推測どおり、
> url  :https://kinmu.case.foo.co.jp/cndb03/WPSM_Menu.P_MainFrame
> なりました。

やはり、ブラウザで読み込みが終わる前に実行されていたようですので、
期待通りの動きになっていなかったようですね。

> > また、勤務画面に遷移した後で実行した
> > puts ie.document.all(0).outerHTML
> > (かまたは、puts ie.document.all(1).outerHTML)
> > の出力結果と
> > ブラウザのメニューからソースを表示したときの内容は
> > 同じになりますか?
> 
> ie.document.all(0).outerHTML と ie.document.all(1).outerHTML 出力結果の
> 差異は、

いや。そうではなくて、ブラウザのURLと document.url
の結果が一致しないようで、訳がわからず、詳しい状況を知りたくて
  ie.document.all(0).outerHTMLの結果
  (スクリプトから取得できるHTMLの内容)
と
  InternetExplorer のメニューバーの「表示」-「ソース」で表示した内容
  (ブラウザが実際に表示しているHTMLの内容)
が同じなのかどうか確認してただきたかったんです。

> ブラウザは、勤務画面を表示しており、左フレームの勤務一覧のリンクが、ie.
> document.all(0).outerHTMLからは見えない状況です。

ちょっと話が遠回りになって申し訳ないですが、多分、見えなくて正解だと思いますよ。

frame というものをHTMLで記述する場合、どのように記述して、
ブラウザではどう表示されるのか理解されていますでしょうか?
その理解がないとちょっと厳しいかも知れませんね。

たとえばフレームを解説したページがあって
http://open.shonan.bunkyo.ac.jp/~ohtan/kouza/frame.html

ここの一番下のサンプル表示のリンク先のページ
http://open.shonan.bunkyo.ac.jp/~ohtan/kouza/frame-0.html
を例にとると
左フレームの「トップページ」のリンクの文字を表示するためには

  ie = WIN32OLE.new("InternetExplorer.Application")
  ie.visible = true
  ie.navigate "http://open.shonan.bunkyo.ac.jp/~ohtan/kouza/frame-0.html"
  sleep 3 # ここは適当です

  #  これでは[トップページ」のリンクの文字が表示されない。
  #  ここで表示されるのは、
  #  http://open.shonan.bunkyo.ac.jp/~ohtan/kouza/frame.html
  #  の1. フレームの基本形のHTML(と似たようなもの)。
  #  ここでは、左のframeが
  #    src="frame-mokuji.html"
  #  ということから frame-mokuji.html はドメインがページのURLと
  #  同じであることがわかる。
  #  
  puts ie.document.all(0).outerHTML

  #  frameのsrcがページのURLと同じドメインのため
  #  frameの中のdocumentの中のHTMLを表示すれば
  #  「トップページ」のリンクが表示される。
  #  http://open.shonan.bunkyo.ac.jp/~ohtan/kouza/frame.html
  #  の3. フレームのサンプルの frame-mokuji.htmlの内容
  #  が表示される。
  puts ie.document.frames.item(0).document.all(0).outerHTML

というようになります。「見えなくて正解」だと私が思っている
理由が伝わりますか?

> 以下、ソースと出力結果を付けますので、大変恐縮ですが、引き続きご教示いた
> だければ幸いです。

うーん。一見、正しそうに見えます...。

> url  :https://kinmu.case.foo.co.jp/cndb03/WPSM_Menu.P_MainFrame

がページのURLで

左のframe の src が
> src="/cndb03/WPSM_Menu.P_Menu?szShimeinoCookie=00009107001864333973&amp;
  ....
なので
    https://kinmu.case.foo.co.jp/cndb03/WPSM_Menu.P_MainFrame?.....
でドメインが同じに見えます。
フレームの中とページのURLのドメインが違うからという理由でエラーになっている
訳ではなさそうです。

  src="https://kinmu.case.bar.co.jp/cndb03/WPSM_Menu.P_Menu?....
とかになっているとドメインが違うという理由でアクセスエラーになります。

ただ、sleep は

>   # 共用認証画面のログインボタンを押し、勤務一覧画面に遷移させる

の後にも入れた方がよい気がします。

InternetExplorerがframeの中身も含めて勤務一覧画面の読み込みを
完了してからでないと「勤務一覧」リンクにアクセスできない
でしょうから。

あとは、全くの当てずっぽうですが、認証が必要なので、スクリプトからだと
そもそもアクセスが拒否されてしまいエラーになってしまうとか...。

あまり、お役に立てなくて申し訳ないです。

  助田

In This Thread