[ruby-list:49947] Re: [質問] RubyからIE操作 ie.Document.All.???.click
From:
<yamataka@...08.itscom.net>
Date:
2014-09-01 05:00:13 UTC
List:
ruby-list #49947
> 助田です。
山口です。
> On Fri, Aug 29, 2014 at 11:11:46AM +0900, yamataka@u08.itscom.net
wrote:
[...]
> どんな風に書いて動作しないのか、動作しないコードも書いておくと
> アドバイスする方も質問に答えやすいと思いますよ。
助田さんの、仰るとおりです。
大変失礼しました。
> で、試していないので、動くかどうかわかりませんが、
>
> 遷移したあとで、
> # フレームのコレクションを取得
> frame_collection = ie.Document.frames
>
> # 左側のフレームを取得。
> # ここでは左側のフレームが仮に1番目のフレームだと仮定しています。
> # もしかしたらitem(1) や item(2) など1番目のフレームじゃないかも
> # 知れません。
> target_frame = frame_collection.item(0)
>
> # 左側のフレームのドキュメントを取得
> document = target_frame.document
>
> # ドキュメントの中のリンクのコレクションを取得
> link_collection = document.body.all.tags("A")
>
> # リンクのコレクションの中から「勤務一覧」に一致する
> # リンクを探して見つかったらクリック
> link_collection.each {|link|
> if link.innerText == "勤務一覧"
> link.click
> end
> }
>
> 上のスクリプトは、
> http://www.tech-notes.dyndns.org/win32ole/ie_ctrl.html
> のページの中ほどの
> 「IEのDocumentオブジェクトの使い方」
> 「タグエレメントの使い方」
> の説明にあるコードを組み合わせて引用しただけです。読み比べてみてくださ
い。
ご教示、ありがとうございます。
助田さんにご教示いただいた部分を追加したソースが、下記になります。
#!/bin/ruby
# -*- coding: utf-8 -*-
# refer http://www.tech-notes.dyndns.org/win32ole/ie_ctrl.html
DEBUG=true
URL="http://hoge.funya.co.jp/"
require 'win32ole'
ie = WIN32OLE.new("InternetExplorer.Application")
ie.visible = true
# 指定URLを表示
ie.navigate URL
sleep(1) until ie.ReadyState == 4
# "勤務 login" ボタンを押し、勤務管理画面に遷移
ie.Document.All.b_kinmu_login.click
sleep(1) until ie.ReadyState == 4
# フレームのコレクションを取得
frame_collection = ie.Document.frames
# 左側のフレームを取得。
# ここでは左側のフレームが仮に1番目のフレームだと仮定しています。
# もしかしたらitem(1) や item(2) など1番目のフレームじゃないかも
# 知れません。
target_frame = frame_collection.item(0)
p target_frame.ole_methods
# 左側のフレームのドキュメントを取得
document = target_frame.document
# ドキュメントの中のリンクのコレクションを取得
link_collection = document.body.all.tags("A")
# リンクのコレクションの中から「勤務一覧」に一致する
# リンクを探して見つかったらクリック
link_collection.each {|link|
if link.innerText == "勤務一覧"
link.click
end
}
を実行すると、
p target_frame.ole_methods 部分で、
[item, length, frames, ... , document, ...]
documentがole_methodsとして存在するのですが...
./x.rb:34:in `method_missing': document (WIN32OLERuntimeError)
OLE error code:80070005 in <Unknown>
アクセスが拒否されました。
HRESULT error code:0x80020009
例外が発生しました。
from ./x.rb:34
と、document が method として存在しないと
document = target_frame.document
部分で、エラーがでます。
その前のコード、
target_frame = frame_collection.item(0)
itemの引数を 1, 2 にしても同じエラーとなります。
# "勤務 login" ボタンを押し、勤務管理画面に遷移
ie.Document.All.b_kinmu_login.click
sleep(1) until ie.ReadyState == 4
の部分で、該当のページが表示されているので、以降の部分で何かが悪いのでし
ょうが、
見当がつかず...
大変、お手数をお掛けしますが、ご教示いただければと...