2013-04-26 58 views
-1

我需要知道如何使用Delphi XE3填充Web表單?我有一個用戶名和密碼的Web表單,所以如何以編程方式填充它?如何填寫使用delphi XE3的web表單輸入?

頁面是http://batelco.com/portal看到只有兩個輸入用戶名和傳遞所以如何填寫和傳遞它們?

+1

也許你並不需要填補,但只後呢?如果表單不包含驗證碼或類似的一次性保護,則可以提交結果而無需加載表單。 – 2013-04-26 09:29:45

+2

如果您只需要在後臺進行簡單的POST或GET HTTP請求,則絕對不能使用'TWebBrowser'控件並以編程方式填寫表單。 – 2013-04-26 09:36:10

+0

@AndreasRejbrand似乎他開始用戶登錄序列。鑑於WWW頁面很少使用標準的HTTP Auth,頁面可能會使UTL或cookie或隱藏形式變得怪異,或者上帝知道是什麼。在這種情況下,登錄/密碼並不難,但瞭解身份驗證是如何進行的並且應該傳遞給後面的頁面將是一個單獨而又相當複雜的問題。因此,加載頁面可能是必需的東西,像MS或者其他引擎一樣進入MSIE,但仍然如此。 – 2013-04-26 09:45:24

回答

1

使用Internet Direct(Indy)HTTP客戶端類,可以使用HTTP POST將表單值提交給服務器。

如果已將TIdCookieManager類的實例分配給IdHTTP客戶端組件,則Indy HTTP客戶端還將接收和存儲服務器隨其響應發送的Cookie。

當客戶端向服務器上的其他安全URL進一步發出HTTP請求時,HTTP cookie是許多安全Web應用程序所必需的。然後,Indy HTTP客戶端將發送包含請求的Cookie(如果TIdCookieManager已分配給IdHTTP客戶端組件)。

因此,您可以在登錄URL上發送登錄POST請求,提供所需的身份驗證信息,然後向下載統計信息URL發送GET請求以檢索其HTML。


關於你提到的具體的登錄表單,它採用ASP,這裏是一個有關以編程方式發送POST請求的問題:HowTo deal with cryptic hidden values for ASP Net (__VIEWSTATE)

+0

該人甚至無法理解該頁面是否是實際的登錄表單,並且您建議他跨域Cookie處理和複合跨域頁面手動解析。雖然這應該是最有效的方式,但我認爲他不會這樣做。 – 2013-04-26 13:04:17

+0

@ Arioch'The我沒有提到或者暗示「跨域曲奇」處理的任何地方 – mjn 2013-04-26 14:01:11

+0

你不這樣做,但頁面使用登錄表單來回mquite不同的域名,在登錄時設置cookie將不得不對原來的域名使用最多可能 – 2013-04-26 16:22:06

0

本文演示如何獲取和設置命名元素的屬性。

你應該得到並設置value屬性。什麼樣的ID會形成元素取決於你的頁面。

Check if Element with ID has a value


本文一邊問道「如何閱讀」還介紹了兩個如何獲得價值以及如何對其進行設置。如果你可以做A := B(讀取值),那麼你可能也可以做B := A(設定值)。

read content in webbrowser input field


現在,該頁面的URL中我們可以點擊右按鈕WWW瀏覽器右上角的登錄表單元素,並選擇「檢查元素」看題所給其來源。或者,如果瀏覽器不是現代的,並且沒有菜單上的Inspect命令,我們可以使用另一個推薦,如View page source,並在整個頁面的源代碼中找到表單。例如那些元件中的一個是

<input name="txtUsername" type="text" maxlength="15" 
id="txtUsername" tabindex="1" class="inpu-field" onfocus="txtfocus();" 
onblur="txtblur();" style="color: gray; background-image: none;"> 

因此,我們知道知道或形式的第一元件,其「value」屬性,我們需要得到(讀出)設置(寫入)的ID。 上面的鏈接顯示瞭如何做到這一點,給出已知的ID。

順便說一句,你給你的頁面錯誤,真正的頁面https://www.e-services.com.bh/Eservices/login_batelco.aspx

有關原始網頁,它只是不與MSIE6工作是TWebBrowser在默認模式下怎麼辦 - 兼容所有的使用Microsoft ActiveX組件編寫的應用程序。請參閱http://imgur.com/ad4wbOI

如果可以使用Google Chrome代替TWebBrowser。 或者你可以到達的ActiveX接口TWebBrowser屬性之一,並獲得新的界面和關閉MSIE6兼容性http://msdn.microsoft.com/en-us/library/aa752510.aspx

但是,「如何使這個頁面呈現在twebbrowser」是另一個新的問題,而不是你在這裏問的問題。


其實,唯一的原因,我爲什麼不選結束這個問題的重複,是因爲上面沒有的物品具有「設置」或「寫入」或在其標題爲「補」,所以找到他們比平凡更難一點。


但是,如果頁面沒有突變負荷和不具備一些一次性的保護狀CAPTCHA或獨特的形式哈希碼,那麼你就可以張貼所有單個HTTP請求的值,甚至沒有加載形成。

+0

告訴我怎麼做?順便說一句,部分用戶名和密碼不能顯示在twebbrowser中!如何閱讀它! – Dreamer64 2013-04-26 12:04:42

+0

如果他們「不能顯示」,那麼這是另一個問題。如果您的用戶無法看到在哪裏點擊並輸入文字 - 那麼您無需閱讀。如何在Delphi + MSIE中加載該頁面,請另外提出問題。 或者你可以使用Delphi + Chrome或Delphi + THTMLViewer – 2013-04-26 12:18:38

+0

如果我使用Internet Explorer它沒有問題,但它使用Delphi的twebbrowser它不是!這是問題發生的地方! – Dreamer64 2013-04-26 12:25:05