アクセスしたHTMLページから、その要素を取得するプログラムを作成しています。
この中で、HTMLフォームの選択項目である<SELECT>の内容(各<OPTION>の表示文字列と、それに対応するvalue値)の取得を簡単にできないものかと思案しています。
OleVariant(Document as IHTMLDocument2).FORM名.SELECT名.options[index].text
で取得できるか、と思ったのですが、"text"(あるいは"value")はサポートされていないというエラーが出ます。
(上記の例でFORM名.SELECT名.lengthは参照できるのですが……)
HTML文書をテキストとしてガリガリと解析する以外に、FORM要素を一発で参照できる手段はありませんでしょうか?
よろしくお願いします。
>FORM要素を一発で参照できる手段はありませんでしょうか?
FORM要素を一発で参照できる
関数なり、クラスなり自分で作ったらええがな。
やっとことはありませんが、できるんじゃないでしょうか。
ただインターフェースがしっかり書かれていないと、動くものも動かないというところなんではないかと。
Delphi標準のってなんか省略されてるような印象を受けるんですが
真偽のほどは定かでありません。
(使ったことはあります。きちんと期待通り動きますが
そこまで細かい制御はやったことないんで)
ちなみに pascalは、
>OleVariant(Document as IHTMLDocument2).FORM名.SELECT名.options[index].text
のような FORM名やSELECT名といった書き方は、認識できませんので(実行時まで分からないから)
このような場合、文字列でパラメータを渡してリターンがそのオブジェクトであるような関数が存在すればよいわけです。
をみると
forms というメソッドだかオブジェクトだかわかりませんが、あることはありますね。
さらにググってみると
というサイトに興味深い内容が書いてあります。
ちょっと読めませんが、ソースの部分はなんとか読めると思います。
私なりに解釈してみると
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もできそうなんですが
またもや真偽のほどは定かでありません。
ツイート | ![]() |