[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
の部分で、該当のページが表示されているので、以降の部分で何かが悪いのでし
ょうが、
見当がつかず...

大変、お手数をお掛けしますが、ご教示いただければと...





In This Thread