2016-11-30 56 views
0

我正在尋找創建Delphi的autoform填充,顯然需要一個很好的方法來捕獲哪些輸入框是每個站點上的登錄框,所以想知道如果我使用Twebbrowser組件並加載頁面,然後單擊特定網站上的用戶名和密碼框,然後我可以提取我單擊的表單名稱和輸入框名稱。檢測Twebbrowser輸入框單擊德爾福XE2

總之我需要delphi捕獲加載到twebbrowser組件中的網頁上的選定輸入框的名稱。

任何從twebbrowser頁面加載的頁面捕獲這些信息的好方法將不勝感激!

+0

你想這樣做的任意頁面 –

+0

是的大衛,基本上我有數百個網站,這些網站主要是藝術作品相關的,我多年來一直註冊並且正在設置啓動板以訪問網站輕鬆無需記住所有密碼或使用第三方密碼實用程序。我可以捕獲表單和所有字段,但只想爲每個網站上的用戶名和密碼選擇每個框,並且delphi可以捕獲我單擊的Web表單輸入框的名稱,然後將它們與頁面URL一起添加到字符串列表中。 –

+0

我從來沒有去過這個,但相信我需要檢測哪個html元素已經在twebbrowser加載網頁焦點,如果它是一個輸入框,然後捕獲輸入框的名稱,也是表單名稱或表單編號,如果表格沒有名字。 –

回答

2

下面的代碼演示瞭如何找到名爲「輸入1」 INPUT元素:如果您需要找到多個輸入元素

var 
    E : IHtmlElement; 
    D : IHtmlDomNode; 
    Doc2 : IHtmlDocument2; 
    Doc3 : IHtmlDocument3; 
    All : IHTMLElementCollection; 
    i : Integer; 

begin 
    Doc3 := WebBrowser1.Document as IHtmlDocument3; 
    D := Doc3.GetElementByID('input1') as IHtmlDomNode; 
    if D <> Nil then begin 
    ... 

,或者您希望模式匹配的 名INPUT元素(一個或多個),您可以通過檢索文檔的 的IHTMLDocument2接口做到這一點,然後遍歷其all集合:

Doc2 := WebBrowser1.Document as IHtmlDocument2; 
    All := Doc2.all; 
    for i := 0 to All.Length - 1 do begin 
    E := All.Item(Null, i) as IHtmlElement; 
    // Test E and do what you like with it 
    end; 

你可以使用這樣的函數來找到一個輸入元素

function GetParentFormElement(E : IHtmlElement) : IHtmlElement; 
begin 
    Result := Nil; 
    while E <> Nil do begin 
    if CompareText(E.tagName, 'form') = 0 then begin 
     Result := E; 
     exit; 
    end; 
    E := E.parentElement; 
    end; 
end; 

的父窗體元素,並使用它像這樣:

E := D as IHtmlElement; 
E := GetParentFormElement(E); 
Assert(E <> Nil); 

並非所有形式的有一個名稱或ID,因此如何如果頁面中有多個表單,是否可以獲取父表單的編號或引用?

同樣,並非所有INPUT元素都包含在FORM之一。 TBH,我不知道你想做什麼的強有力的方式可以讓網頁的作者對它做出改變。無論如何,一定要有一些的方式來識別給定的INPUT元素,否則服務器將無法提取用戶的迴應,一定不會在那裏?所以這只是一個問題,要弄清楚特定頁面的可能性。它不在元素的屬性中,那麼也許你可以尋找附近的文本元素的文本 - 畢竟,必須有一些提示給用戶,告訴他們在哪裏填寫什麼。但是這實際上與你原來q的實質不同,我希望我已經回答了。如果你需要更多的幫助,我建議你問一個新問題。確保你包含你已經嘗試過的細節(代碼),因爲缺乏它們的qs往往不會在SO中得到很好的接收。

+0

感謝您的反饋Martyn,只是我需要的信息,即使我選擇了頁面上的select元素,因爲當我需要信息時,我將在頁面上,但我還需要查找父窗體的數字輸入框,我也選擇。我會怎麼做呢? –

+0

我不太清楚「父表單的編號」是什麼意思,但我在回答中添加了一些代碼以顯示如何查找輸入框的父表單。大概一旦你找到了表單元素,你可以獲得你之後的信息? – MartynA

+0

爲了達到Martyn的目標,我會盡快給你一個嘗試,讓你知道我是怎麼做到的! –

0

對不起,我的格式,新張貼在這裏!減少版本。

procedure TForm5.Button2Click(Sender: TObject); 
var 
Document: IHTMLdocument2; 
MyEl: IHTMLElement; 
begin 
    MyEl := (WebBrowser1.Document as IHTMLDocument2).activeElement; 
     If MyEl.tagName = 'INPUT' then 
      begin 
       edit2.Text := MyEl.getAttribute('Name', 0); 
      end; 
end; 
+0

這似乎不是你q的答案,所以你應該編輯你的q來包含它,然後刪除這個答案。在SO,答案是爲q的答案,而不是添加/反饋/評論。如果您仍然需要幫助,我已經爲您發佈了我自己的答案。 – MartynA