2017-11-05 25 views
0

私はTWebbrowserコンポーネントといくつかのボタンを持っています。これまではうまくいきましたが、1つの手順でウェブサイトのボタンをクリックして、追加情報を表示したいときにクリックする必要があります。Delphi:Webbrowser.Document - > IDで要素の存在を確認してください

だから私はこれを持っている:

WebBrowser1.OleObject.Document.GetElementByID('linkDtlC0-0').Click(); 
WebBrowser1.OleObject.Document.GetElementByID('linkDtlC0-1').Click(); 
WebBrowser1.OleObject.Document.GetElementByID('linkDtlC0-2').Click(); 

その後、私は上をクリックして次の3つの要素を表示するには、Webサイト上のボタンをクリックする必要があります。これまでのところ問題はありませんが、ボタンをクリックすると、サイトでは3つの要素を表示するのに数秒かかります。

問題: ボタンをクリックした直後に要素をクリックしようとすると、この名前で(まだ)要素がクリックされていないというエラーが表示されます。もちろん、私のプログラムは数秒待つことができます(もっと)確信してからクリックしようとしますが、私は時間を無駄にしたくありませんので、私の質問は です。名前)がTWebbrowser内のドキュメントに存在しますか?

+0

'OnDocumentComplete'イベントを処理し、' pDisp = TWebBrowser(送信者).ControlInterface'(つまり、文書は "準備完了" であることを意味する)場合があり確認してください。その場合は、文書の移動を開始します。特定の要素が存在するかどうかを調べるには、 'GetElementByID'によって返された参照が' Assigned'であるかどうかだけを調べることができます。 – Victoria

+0

これも機能しません。あなたの答えは正しいかもしれませんが、私はTWebbrowserの疑わしい動作に遭遇しました:私は手動でボタンをクリックし、希望の要素が現れるまで数秒待っていました。次に、 'WebBrowser1.OleObject.Document.All.Item(i).ID);を使ってすべてのIDをリストアップし、最初の3つの要素が正常に表示されましたが、次の(4番目の)通常のブラウザ(chromeとfirefox)は、4番目の要素がそこにあるはずだと私に伝えていました。私のTWebbrowserは、何らかの未知の理由でサイトの変更を無視しているようです。 – qGold

+0

サイトでは時には最初の数字「0」を3回使用することもありますが、最初の数字を大きくする前に4〜5回使用することもあります。これは私にはあまり明らかではありませんでした。私はこれが毎回これを行うと思っていたが、それはそうではない。この質問をして申し訳ありませんが、これはTWebbrowserコンポーネントの問題だと思いました。 - – qGold

答えて

0

要素が存在するかどうかをチェックし、:

uses 
    MSHTML; 

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant); 
var 
    Element: IHTMLElement; 
begin 
    if pDisp = TWebBrowser(ASender).ControlInterface then 
    begin 
    Element := (WebBrowser1.Document as IHTMLDocument3).getElementById('linkDtlC0-3'); 
    if Assigned(Element) then 
     Element.click; 
    end; 
end; 
+1

いいえ、これはあなたがするはずのものではありません。これは[this](https://pastebin.com/5dMieMuh)と同じくらいシンプルにすることができます。 – Victoria

+0

ありがとう、これはずっと良いです、私はコードを更新します – qGold

+0

回答が更新されました – qGold

関連する問題