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

From: <yamataka@...08.itscom.net>
Date: 2014-09-08 11:05:52 UTC
List: ruby-list #49962
山口です。

> 助田です。

何度も、ご教示、ありがとうございます。
 
> On Fri, Sep 05, 2014 at 06:43:16PM +0900, yamataka@u08.itscom.net 
wrote:
> > $ script.rp > tako
> > $ grep -i frame tako
> > すると、
> > <TD class=small-font align=left><!--▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
▼▼▼▼
> > ▼▼▼▼▼▼▼▼▼▼▼▼▼▼-->
> > <!--▼ 勤務アナウンス開始 -->
> > <IFRAME style="WIDTH: 717px; HEIGHT: 1px" height=4 marginHeight=0 
src="
> > CnMsg1_Announce.html" frameBorder=0 width=680 name=CnMsg1 
marginWidth=0 
> > scrolling=no></IFRAME>
> > ...
> > 
> > の様に、IFRAMEが、複数存在するのですが、FRAME は存在しませんでした。
> 
> すみません。
> 試していないのでわかりませんが、IFRMAE も該当するみたいです。
> 
> > また、この IFRAME ... src="CnMsg1_Announce.html" は、該当ページに遷
移す
> > る html ではないのです。
> 
> 複数あるIFRAMEの中で目的の左フレームがどれかわかりますか?
> その中で、src= で指定している部分がないでしょうか?

$ ~/tmp$ ./x.rb > /tmp/tako
$ ~/tmp$ grep -i frame /tmp/tako
<IFRAME style="WIDTH: 717px; HEIGHT: 1px" height=4 marginHeight=0 src="
CnMsg1_Announce.html" frameBorder=0 width=680 name=CnMsg1 marginWidth=0 
scrolling=no></IFRAME>
<IFRAME style="WIDTH: 717px; HEIGHT: 1px" height=4 marginHeight=0 src="
CnMsg2_Emergency.html" frameBorder=0 width=680 name=CnMsg2 marginWidth=0 
scrolling=no></IFRAME>
<IFRAME style="WIDTH: 665px; HEIGHT: 20px" height=100 marginHeight=0 src
="CnMsg3_RunInfo.html" frameBorder=0 width=630 name=CnMsg3 marginWidth=0
></IFRAME>
<IFRAME style="WIDTH: 665px; HEIGHT: 140px" height=150 marginHeight=0 
src="CnMsg4_CnetInfo.html" frameBorder=0 width=630 name=CnMsg4 
marginWidth=0></IFRAME>

となるのですが、IFRAMEのsrcで指定されている.htmlは、どれも
「勤務一覧」の画面のhtmlをさしていないのです。

> > 手順としては、
> > 
> > http://www.case.foo.co.jp/ で、勤務ログインボタン押下
> 
> この部分は、script で勤務ログインボタンを押すことができて遷移できるん
ですよね?

はい、問題なく遷移できています。
$:~/tmp$ grep -i b_kinmu_login /tmp/tako
<FORM method=get name=KinmuLogin action=https://kinmu.case.foo.co.jp/cndb02/WPSL_LOGON.P_LogonUser><A
 href="javascript:Submit('KinmuLogin');"><IMG onmouseover="MM_swapImage
('b_kinmu_login','','images/button/b_kinmu_login_mo.gif',1)" title="case
/勤務 ログイン" onmouseout=MM_swapImgRestore() border=0 name=b_kinmu_
login src="images/button/b_kinmu_login.gif"></A> </FORM></TD>
の部分になります。
 
> > (*)社内共用認証画面に遷移 
> > (*) https://www11.scas.foo.co.jp/SSO/Login?AccessID=gCB.....&Lang=ja 
で
> > User IDとPass Wordを入力
> > * に関しては、質問を簡単にするため、IEを他にも立ち上げ、そちらで認証
を済
> > ませているので、この画面には遷移しません
> > 
> > 勤務画面に遷移
> 
> 勤務画面に遷移した後で
>   print ie.document.url + "\n" 
> と実行すると
>  "http://www.case.foo.co.jp/..." 
> と表示されるという理解で合っていますか?

勤務画面に遷移した後で、
"http://www.cae.foo.co.jp/" 
と表示されています。

これは
ie.navigate URL
で、指定しているURLと同じもので、一番最初にアクセスするURLです。

> で、その状態で
> 
> > https://kinmu.case.foo.co.jp/cndb03/WPSM_Menu.P_MainFrame 勤務画面の
左フ
> > レームの勤務一覧を押す
> 
> この勤務一覧リンクを押したいが、その前にスクリプトは
> documentメソッドを実行したところでエラーになる
> という理解で合っていますか?

はい、その通りです。

ブラウザのURL入力欄には https://kinmu.case.foo.co.jp/cndb03/WPSM_Menu.P_MainFrame

が表示されています。

> このとき、左フレームの中身は
>   www.case.foo.co.jp
> か
>   kinmu.case.foo.co.jp
> のどちらから取得して表示しているのかわかりますか?

これは、どうすれば確認できるのか、理解が足りないて...
左フレームのソース内に www で検索しましたが、該当はなく、
また、kinmuも該当する箇所がなくて...

> もし
>   www.case.foo.co.jp
> であれば、動作するスクリプトが書けそうな気がします。
> 
> ですが、
>   kinmu.case.foo.co.jp
> であれば、勤務一覧リンクは、違うドメインのコンテンツのため
> スクリプトから動作させるのは無理だと思います。
> 
> frameのhrefは見れるのかな...?(独り言です。)
> 
> 試していないので、動作しないかも知れませんが、
> 目的の左のフレームが何番目かわかれば
> 
>   # 1番目ならitem(0)、2番目ならitem(1)、...
>   print ie.document.frames.item(0).location.href
> 
> というようにしてframeの中身のドメインがわかるかも知れません。

item(0),item(1)共に試してみましたが、
./x.rb:58:in `method_missing': href (WIN32OLERuntimeError)
    OLE error code:0 in <Unknown>
      <No Description>
...
のように、エラーになってしまいます。
 
> frameの中身のドメインがie.document.urlと同じなら
> 勤務一覧リンクをクリックするスクリプトが書けるかも知れませんが、
> 違う場合は、残念ながら、勤務一覧リンクにアクセスする前の documentメソ
ッド
> の段階でエラーになってしまいます。

何度もご教示いただいて、本当に恐縮です。
何とか動くようにできればと...


In This Thread