我在使用MSHTML COM組件屏蔽本網站的一些數據時出現問題。我的WPF表單上有一個WebBrowser
控件。 我檢索HMTL元素的代碼位於WebBrowser LoadCompleted
事件中。將數據的值設置爲HTMLInputElement
並調用HTMLInputButtonElement
上的點擊方法後,它拒絕提交請求並顯示下一頁。MSHTML COM問題點擊提交按鈕
我分析上的按鈕,它實際上是調用JavaScript函數onclick屬性的HTML和它處理了我的請求。這讓我不確定是否調用JavaScript函數導致問題?但有趣的是,當我將代碼從LoadCompleted
方法中提取出來並將其放入按鈕單擊事件中時,它實際上將我帶到下一頁,因爲LoadCompleted
方法沒有做到這一點。做這種事情會挫敗嘗試自動屏幕頁面的重要性。
關於另一個想法:當我有LoadCompleted
方法中的代碼時,我認爲HTMLInputButtonElement
沒有完全渲染到導致點擊事件沒有觸發的頁面,儘管事實上當我看着對象運行時間它實際上是在那裏提交按鈕元素,並且狀態是說我完成了,這讓我更加困惑。
這裏是我的LoadCompleted
方法中使用的代碼和按鈕的點擊方法:
private void browser_LoadCompleted(object sender, NavigationEventArgs e)
{
HTMLDocument dom = (HTMLDocument)browser.Document;
IHTMLElementCollection elementCollection = dom.getElementsByName("PCL_NO_FROM.PARCEL_RANGE.XTRACKING.1-1-1.");
HTMLInputElement inputBox = null;
if (elementCollection.length > 0)
{
foreach (HTMLInputElement element in elementCollection)
{
if (element.name.Equals("PCL_NO_FROM.PARCEL_RANGE.XTRACKING.1-1-1."))
{
inputBox = element;
}
}
}
inputBox.value = "Test";
elementCollection = dom.getElementsByName("SUBMIT.DUM_CONTROLS.XTRACKING.1-1.");
HTMLInputButtonElement submitButton = null;
if (elementCollection.length > 0)
{
foreach (HTMLInputButtonElement element in elementCollection)
{
if (element.name.Equals("SUBMIT.DUM_CONTROLS.XTRACKING.1-1."))
{
submitButton = element;
}
}
}
submitButton.click();
}
FYI:這是網頁,我嘗試使用MSHTML訪問的URL, http://track.dhl.co.uk/tracking/wrd/run/wt_xtrack_pw.entrypoint 。
嗨,我面臨同樣的問題。你能找到解決方案嗎? – 2011-05-27 23:03:52
我解決了這個問題,不使用表單按鈕,而是獲取表單元素本身並在其上調用'submit()'。 – ViliX64 2017-09-10 10:08:41