HTMLドキュメントの<FORM>要素を取得するには?


はると  2006-04-04 20:54:34  No: 20829

アクセスしたHTMLページから、その要素を取得するプログラムを作成しています。
この中で、HTMLフォームの選択項目である<SELECT>の内容(各<OPTION>の表示文字列と、それに対応するvalue値)の取得を簡単にできないものかと思案しています。

OleVariant(Document as IHTMLDocument2).FORM名.SELECT名.options[index].text

で取得できるか、と思ったのですが、"text"(あるいは"value")はサポートされていないというエラーが出ます。
(上記の例でFORM名.SELECT名.lengthは参照できるのですが……)
HTML文書をテキストとしてガリガリと解析する以外に、FORM要素を一発で参照できる手段はありませんでしょうか?
よろしくお願いします。


どやさ  2006-04-05 02:37:52  No: 20830

>FORM要素を一発で参照できる手段はありませんでしょうか?

FORM要素を一発で参照できる
関数なり、クラスなり自分で作ったらええがな。


できるとおもうよ  2006-04-14 14:43:00  No: 20831

やっとことはありませんが、できるんじゃないでしょうか。
ただインターフェースがしっかり書かれていないと、動くものも動かないというところなんではないかと。

Delphi標準のってなんか省略されてるような印象を受けるんですが
真偽のほどは定かでありません。
(使ったことはあります。きちんと期待通り動きますが
そこまで細かい制御はやったことないんで)

ちなみに pascalは、
>OleVariant(Document as IHTMLDocument2).FORM名.SELECT名.options[index].text
のような FORM名やSELECT名といった書き方は、認識できませんので(実行時まで分からないから)
このような場合、文字列でパラメータを渡してリターンがそのオブジェクトであるような関数が存在すればよいわけです。

MSDN
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/ifaces/document2/document2.asp

http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/ifaces/document2/get_forms.asp

をみると
forms というメソッドだかオブジェクトだかわかりませんが、あることはありますね。

さらにググってみると

http://jacky1936.cndev.org/

というサイトに興味深い内容が書いてあります。
ちょっと読めませんが、ソースの部分はなんとか読めると思います。

私なりに解釈してみると

var 
    Form: IHTMLFormElement;
    Doc: IHTMLDocument2  ;

begin
  with WebBrowser1 do 
  begin
     Doc:= Document as IHTMLDocument2;

     //これでフォームオブジェクトにアクセスできるのか?
     Form:= Doc.Forms.item('form_name',0) as IHTMLFormElement;

     //INPUT TYPE=TEXT などの事と思う
     (Form.item('login',0) as IHTMLElement).setAttribute('value',  Edit1.Text,0);
     (Form.item('password',0) as IHTMLElement).setAttribute('value', Edit2.Text,0);
     //(setがあるなら getAttributeもあるかもしれない)

     //Javascriptで form.submitとかとやった場合と同じようになるんでしょうか
     Form.submit;
 
     //INPUT TYPE=SUBMIT かな
     (Form.item('.save',0) as IHTMLElement).click;
  end;
end;

のように sumitやらclickもできそうなんですが
またもや真偽のほどは定かでありません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加