2

例 1: WebBrowser.OleObject.Document.GetElementByID('ID HERE').Click;

例 2 : < input type="submit" VALUE="Login" >

上記の 2 つの例は、Delphi を介して Web ページのボタンを押すためのものです。Ex2 はさまざまな Web サイトでうまく機能しますが、すべてではありません。これは、Ex2 が HTML ボタンでしか機能しないためですか? Ex1 を試しましたが、一部のコードが欠落しています。試してみると、「オブジェクトまたはクラス タイプが必要です」というメッセージが表示されます。また、Ex1 にはサンプル コードがありません。このメッセージが表示される理由を教えてください。Ex1 のコードを追加してください。

4

3 に答える 3

1

このコードは次の場所から取得しました: Delphipages の MrBaseball34 WebBrowser1」ではなく「WebBrowser」と記述したため、最初は機能しませんでした。しかし、それは完全に機能します。コードは次のとおりです。

procedure TForm1.Button1Click(Sender: TObject);  
var  
x: integer;  
thelink: OleVariant; 

begin  
thelink:= WebBrowser1.OleObject.Document.all.tags('A');  
if thelink.Length > 0 then  
  begin  
  for x := 0 to thelink.Length-1 do  
    begin  
    if Pos('put id string here', thelink.Item(x).id) > 0 then
      begin  
        thelink.Item(x).click;  
        Break;
      end;
    end;
  end;
end;
于 2012-10-26T09:42:07.380 に答える
0

TWebBrowser および一般的な COM/ActiveX オブジェクトを操作する場合、レイト バインディングとアーリー バインディングの違いを知っておくと非常に便利です。OleVariant 変数を使用し、それらに「ライブ」オブジェクトを参照させ、ドット演算子 ( .) を使用してメソッドとプロパティを呼び出す場合、それらは実行時に解決されます。これらは、特定のインターフェイスを使用するアーリー バインディングとは対照的に、レイトバインディングです。

MSHTMLuses 句にunitを含めてIHTMLDocument3(WebBrowser1.Document)から、 および によって定義されたさまざまなインターフェイス ( およびなどMSHTML)を使用します。ある時点までコード補完も得られることがわかりますが、演算子とのようなものの間で追加のキャストが必要になる場合もあります。IHTMLElementIHTMLAnchorElementIHTMLElementIHTMLElement2as

于 2012-10-25T19:24:06.133 に答える
0

何らかのエラーが発生する可能性があります。ID のつづりが間違っていたり、データ型が間違っていたり、使用したいインターフェイスが見つからなかったり、アイテムが不足していてnil代わりに戻ってきたりします。

のような長い行の問題WebBrowser.OleObject.Document.GetElementByID('ID HERE').Click;は、エラーが発生した場所がほとんどわからないことです。また、中間値とそのプロパティを確認するのが簡単でない場合もあります。このような長い行には多くの生来の期待がコード化されており、どれが失敗したかをほとんど検出できません。

このような長い行でエラーに遭遇した場合は、それらを小さなアクション アイテムに分割することをお勧めします。これは、古い分割統治の原則です。いくつかの変数を宣言し、この長くて複雑な行を複数の単純な行に分割します。

var0 := WebBrowser;
var1 := var0.OleObject; 
var2 := var1.Document; 
var3 := var2.GetElementByID('ID HERE'); 
var3.Click;

これをトレースし、一度に 1 行実行すると、トラバースの各ステップで発行される値とデータ型を確認できます。

于 2012-10-26T06:45:25.213 に答える