HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1224
スペースIEの操作やCOMオブジェクトに関する質問4解決


スペース

リンク

2016/12/24(Sat) 15:07:59|NO.77694

IEでボタンやリンクをクリックする方法について調べていて、
下記のスレッドのtksさんの書き込んだサンプルについて、質問があります。
http://hsp.tv/play/pforum.php?mode=pastwch&num=5914


o = o("forms",0)

この1文ですが、formsとはログインフォームのformと同じなのでしょうか?



この記事に返信する


スペース

リンク

2016/12/24(Sat) 15:11:05|NO.77695

もし同じだとして、例えばformが存在しないただのbuttonやinputをクリックするには、
どのように書けば良いのかわかりません。

nameやclassやidでbuttonやinputやを指定する方法とformsとformの違いを教えていただけないでしょうか。
宜しくお願いします。



スペース

リンク

2016/12/24(Sat) 15:17:30|NO.77696

スレッドを立てる時に全て書こうとしたのですが、「利用規約に違反しています」と表示され投稿できませんでした。
どの単語が原因かわからなかった為いくつかに分割して投稿してみた所、「h r e f」が原因でした。
何故この単語がNGに設定されているのでしょうか・・・



inovia

リンク

2016/12/25(Sun) 01:39:33|NO.77713

> この1文ですが、formsとはログインフォームのformと同じなのでしょうか?

o = o("forms",0)

は0番目のformタグ内の中身(エレメント)を取ってきてるだけです。
タグは複数回定義できるので、以下のHTMLのようにformタグが2回出てきて、
先頭のformタグ(name="m0")を取得したいときは o("forms",0) とするわけです。
その次(name="m1")が欲しいなら、 o("forms",1) になります。


<form name="m0"> <input name="edit"> <input type="submit" value="送信"> </form> <form name="m1"> <input name="edit"> <input type="submit" value="送信"> </form>

>例えばformが存在しないただのbuttonやinputをクリックするには

クリックしたいbuttonやinputの

IDがわかってるなら、getElementById で、
名前がわかっているなら、 getElementsByName で、
クラス名がわかっているなら、getElementsByClassName で、(※古いIEでは使えない)
タグ名がわかっているなら、 getElementsByTagName

を使って探さないといけないです。
書いてあるHTMLによってボタンの特定処理が変わってくるかと思いますけども…。

簡単なサンプルを作ってみました。
方法1〜5までありますが、どれもformで囲まれていないボタンを押すサンプルになります。
http://hsp.moe/test/bbs/test.html


// お試し用なので、エラー処理は考慮されていません // 5回ダイアログが表示されます。 newcom ie, "InternetExplorer.Application" //IEを表示する ie("Visible")=1 //IEで開く ie->"Navigate" "http://hsp.moe/test/bbs/test.html" //IEがページを読み込み終わるのを待つ repeat wait 10 : if( ie("Busy") == 0 ) { break } loop o = ie("Document") repeat wait 10 : if( o("readyState") == "complete" ) { break } loop // C:の送信ボタンを押してみる(formがない!) pDoc = ie("Document") // 方法1: // id="ccc"のdivタグ内にはinputタグが2つ定義されている。 // value="送信" となっているものが送信ボタンなので、探して押してみる方法。 dialog "方法1" comres pDiv pDoc->"getElementById" "ccc" comres pTags pDiv->"getElementsByTagName" "input" repeat pTags("length") // タグが列挙されるので順番に見ていく… pElem = pTags("item", cnt) // pElem("type") == "button" でもいける if pElem("value") == "送信" { pElem->"click" : break // Cが表示される } loop // 方法2: // id="ccc"のdivタグ内にはinputタグが2つ定義されている。その1番目を押してみる方法 dialog "方法2" comres pDiv pDoc->"getElementById" "ccc" comres pTags pDiv->"getElementsByTagName" "input" pElem = pTags("item", 1) pElem->"click" // Cが表示される // 方法3: // このHTMLではinputタグが8つ定義されているので、その5番目を押してみる方法 dialog "方法3" comres pTags pDoc->"getElementsByTagName" "input" pElem = pTags("item", 5) pElem->"click" // Cが表示される // 方法4: // ボタンにIDがついている場合。簡単。 dialog "方法4" comres pInput pDoc->"getElementById" "ddd_sub" pInput->"click" // Dが表示される // 方法5: // value="あいう" のinputタグの次は送信用のボタンであるので、それを押してみる方法 // 方法3の亜種 dialog "方法5" comres pTags pDoc->"getElementsByTagName" "input" repeat pTags("length") // タグが列挙されるので順番に見ていく… pElem = pTags("item", cnt) if pElem("value") == "あいう" { pInput = pTags("item", cnt + 1) // 次のタグを取ってくる pInput->"click" // Cが表示される break } loop


>「h r e f」が原因でした。
自動投稿系のスパムによく入ってくるキーワードだからではないかと。
「/url」「/center」もNGワードとして登録されていますね。

> COMオブジェクトに関する質問
DOMの操作ですかね。
JavaScriptとかやってると、避けては通れない操作な気がします。
「DOM IE」とかでググるといいかもしれません。(他言語が多いですけども…)



スペース

リンク

2016/12/25(Sun) 04:33:34|NO.77715

>>inoviaさん
めちゃくちゃ詳しい説明ありがとうございます。
わざわざサンプルページまで・・・本当に助かりました。
COMではなくDOMなんですね、道理でCOMで調べても出てこないわけです。
h r e fがNGな理由もありがとうございます。確かにスパム対策ならしょうがないですね。

ここからは自力でなんとか覚えていけそうです。
本当に有難うございました。



ONION software Copyright 1997-2023(c) All rights reserved.