人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ポップアップのような動きに見えますけれど、画像にありますテキストボックスに文字を入れるのとボタンをクリックさせたい。

これのHTMLは、下記の通り。
<div class="entrytable_wrap">
<dl class="modalformlist clearfix">
<dt>リンクタイトル</dt>
<dd>
<input class="inputtext" type="text" size="30" name="content_link__title" style="ime-mode:active;">
</dd>
</dl>
<dl class="modalformlist clearfix">
<dt>リンクURL</dt>
<dd>
</dl>
<dl class="modalformlist clearfix">
<input type="hidden" name="id" value="111863236">
<div class="buttonarea buttonsingle clearfix">
</div>

VBAでプログラムを組んでいますが、"content_link__title"を捕まえることが出来ません。
その時のこーどがこちら ↓
For Each c In objSRC.getElementsByTagName("input")
If b.Name = "content_link__title" Then
Debug.Print "=========================="
End If
End If
Next
どうしたら"content_link__title"に文字を渡せるかを
教えて下さい。

よろしくお願いします。

1343357054
●拡大する

●質問者: ほんわか
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●100ポイント

For Each を回している変数が c で、If の判定は b だからうまくいかない、ということではないですか?

For Each c In objSRC.getElementsByTagName("input")
  If b.Name = "content_link__title" Then
    Debug.Print "=========================="
  End If
Next


ほんわかさんのコメント
"If b.Name"は、"If c.Name"の転記ミスです。 でも、動作はうまくいきませんでした。

2 ● Cherenkov
●100ポイント
For Each c In objSRC.getElementsByTagName("input")
 If c.Name = "content_link__title" Then
 Debug.Print "=========================="
 End If
Next

End Ifが多いのでは?


ほんわかさんのコメント
すみません。 こちらも、転記ミスです。 m(__)m 残念ながら、動作はうまくいきませんでした。

Cherenkovさんのコメント
うまくいきません てエラーはでないの?

Cherenkovさんのコメント
For Each c In objSRC.Document.getElementsByTagName("input") にしてみるとか

Cherenkovさんのコメント
objSRCがなんなのかわからん

ほんわかさんのコメント
>てエラーはでないの? はい、出ません。 For Each c In objSRC.Document.getElementsByTagName("input") → これは、エラー438になる。 書き忘れがあった。 For Each ?の前に Set objSRC = ie.document があった。 失礼しました。 m(__)m

Cherenkovさんのコメント
Set objSRC = ie.documentなら objSRC.Document.getElem?は無視してください。 objSRC.getElementsByName("content_link__title") これで捕まえることができるのでは。

Cherenkovさんのコメント
IEがビジー状態の間待つ処理は入っていますか?

ほんわかさんのコメント
objSRC.getElementsByName("content_link__title") = "AAA" こうしてみると、エラー445になってしまう。 見つからなかったって、事でしょう。

Cherenkovさんのコメント
MsgBox objSRC.getElementsByName("content_link__title").Name これでcontent_link__titleがでないならちょっとわかりません

Cherenkovさんのコメント
>> objSRC.getElementsByName("content_link__title") = "AAA" << その操作は間違ってますよ。 DOMオブジェクトとDOMオブジェクトの属性の関係

Cherenkovさんのコメント
やりたいことは >> objSRC.getElementsByName("content_link__title").value = "AAA" << なのかな

ほんわかさんのコメント
そうです。 でも、実行してみるとエラー438になる。

ken3memoさんのコメント
content_link__title で google検索すると http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/4dfafba3-e076-47df-94b4-9888f989bcbb/ などが見つかり、 気になるのは >> HTMLの内容をもう一度調べ直すと、確かに<iframe>がありました。 << とありますが、最後で解決しているみたいなので、参考にしてみるとか? あとは、同じような処理が content_link__title で google検索すると この質問も含め他の質問が多数引っ掛かるので参考にしてみては? 解決の糸口となれば幸いです。

ken3memoさんのコメント
>> objSRC.getElementsByName("content_link__title").value = "AAA" << リンク集なので同じ content_link__title の 入力行が複数あるのかなぁ...

Cherenkovさんのコメント
なるほど、iframeの可能性もあると。 質問にある画像をみるとポップアップのようなので、動的に生成してるから表示されるまで存在しないのかも。 HTML全文かURL提示してもらったほうが速いですね。

ほんわかさんのコメント
了解しました。 Seesaブログの管理画面で、URLは http://blog.seesaa.jp/cms/content/regist/index リンク集のモジュールを、アドオンさせてから「リンク集」ボタンをクリックすると画像と同じになります。

Cherenkovさんのコメント
確認したところ、 ポップアップを表示されるまで対象のDOMオブジェクトは存在しません。 かつポップアップの内容はiframeの奥です。 一部JavaScriptで擬似コードを書いていきます。 まず「リンク集」画像をクリックしてポップアップを表示。 >> document.querySelector('.plugin_drop .link .title_child a').click() << その後、以下のように、iframeにアクセスすればいいはず。 >> MsgBox objSRC.getElementById('content_iframe').contentWindow.document.getElementsByName("content_link__title")[0].Name <<

ほんわかさんのコメント
objSRC.getElementById('content_iframe').contentWindow.document.getElementsByName("content_link__title").Name = "AAA" と挿入してみたら、'content_iframe'でコンパイルエラーとなった。 また、 document.querySelector('.plugin_drop .link .title_child a').click() も、'.plugin_drop .link .title_child a'でコンパイルエラーとなった。

Cherenkovさんのコメント
document.querySelectorの部分を対象のIEでも動くように書き換える必要があります。

ほんわかさんのコメント
document.querySelectorの部分を、objSRC.querySelectorにしてみましたけれど 合ってますよね?

Cherenkovさんのコメント
IE9なら動くかも。それ以下だと多分だめなんじゃ

Cherenkovさんのコメント
IE8からか

ほんわかさんのコメント
今、当方は、IE8で動かしています。 コンパイルエラーとなったのは、VBA側だからIEとは無関係ではないでしょうか。

Cherenkovさんのコメント
エラーになりそうなコードは消しておいて、 MsgBox objSRC.querySelector('.plugin_drop .link .content_title_link') すると取得できるんですかね。 地道にMsgBoxで確認していく。取得できたらclick()。 その後、ポップアップはiframeなので読み込み待ちの処理を入れる必要がある。

ほんわかさんのコメント
('でコンパイルエラーとなった。→ 文法ミス? querySelectorは、参照設定が必要ですか?

Cherenkovさんのコメント
("で囲んでみたら?")

ほんわかさんのコメント
動いたけど、 MsgBox objSRC.querySelector(".plugin_drop .link .content_title_link") ここで、エラー438となって止まった。

Cherenkovさんのコメント
querySelector使わない方法で >|javascript| var plugin_drop = document.getElementsByClassName('plugin_drop'); for (var i = 0, l = plugin_drop.length; i < l; i++) { var link = plugin_drop[i].getElementsByClassName('link'); if (link.length) { var a = link[0].getElementsByClassName("content_title_link"); if (a.length) { a[0].click(); break; } } } ||< とか

ほんわかさんのコメント
当方で使っている言語が、Excel VBAなので教わったコードを変換すると Dim plugin_drop As Variant Dim l, a As Variant Dim ii As Variant Dim link As Variant Set plugin_drop = objSRC.getElementsByClassName("plugin_drop") l = plugin_drop.Length For ii = 0 To ii < l link = plugin_drop(ii).getElementsByClassName("link") If (link) Then a = link(0).getElementsByClassName("content_title_link") If (a) Then 'a.Click() Exit For End If End If Next といった感じになる筈。 でも、動かしてみると l = plugin_drop.Length の部分の「Length」が存在しない様子。 エラー438で止まってしまった。

ken3memoさんのコメント
>> VBAでのgetElementsByClassNameについて http://q.hatena.ne.jp/1335028581 << を読むと コメント欄の自己解決の部分 互換表示オン とか怪しそうですが・・・ . あっ、 2012/07/27 16:07:20 の コメントを見ると、 >> 今、当方は、IE8で動かしています。 コンパイルエラーとなったのは、VBA側だからIEとは無関係ではないでしょうか。 2012/07/27 16:07:20 << なるほど、IE8ですか...IE9からみたいですねgetElementsByClassNameが? (試していないのでなんとも言えませんが、過去の質問 http://q.hatena.ne.jp/1335028581 を見るとIE9から?) でも Set plugin_drop = objSRC.getElementsByClassName("plugin_drop") が通って l = plugin_drop.Length でえらーって感じが? あっ、 Set plugin_drop = objSRC.getElementsByClassName("plugin_drop") で NULLが入っているのかなぁ。 原因として考えられるのはこんな感じです(外していたらスミマセン) あとは、対策ですよね...

ほんわかさんのコメント
マシンを代えました。 今までは、XP IE8だったのをwin7 IE9にしました Debug.Print objSRC.querySelector(".plugin_drop .link .content_title_link") を有効にした所、次のメッセージが出ました。 「http://blog.seesaa.jp/cms/content/regist/return%20false;」 IE9じゃないと使えないコマンドだったのね。

Cherenkovさんのコメント
その後うまくいったのでしょうか

ほんわかさんのコメント
ポップアップをせずに、リンクURLを挿入できるモードがSeesaブログにあることを発見しました。 お陰様で、問題解決に至りました。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ