我遇到问题,使用MSHTML COM组件从这个网站中截取一些数据。我的WPF表单上有WebBrowser
控件。
我检索HMTL元素的代码位于WebBrowser LoadCompleted
事件中。在我将数据值设置为HTMLInputElement
并调用HTMLInputButtonElement
上的click方法后,它拒绝提交请求并显示下一页。
我在按钮上分析了onclick属性的HTML,它实际上是调用JavaScript函数并处理我的请求。这让我不确定调用JavaScript函数是否导致问题?但有趣的是,当我从LoadCompleted
方法中取出代码并将其置于按钮点击事件中时,它实际上将我带到下一页,而LoadCompleted
方法没有这样做。做这种事情就会失败,试图自动屏幕显示页面。
另一个想法:当我在LoadCompleted
方法中使用代码时,我认为HTMLInputButtonElement
未完全呈现在页面上,导致点击事件未触发,尽管事实如此当我在运行时查看对象时,它实际上是在那里持有提交按钮元素,状态就是说我完成了让我更加困惑。
以下是我在LoadCompleted
方法中使用的代码和按钮上的click方法:
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();
}
仅供参考:这是我尝试使用MSHTML访问的网页的网址, http://track.dhl.co.uk/tracking/wrd/run/wt_xtrack_pw.entrypoint
答案 0 :(得分:0)
答案 1 :(得分:0)
OnBeforeNavigate延迟可能导致点击操作失败。
我们注意到,对于一些提交操作,OnBeforeNavigate被调用两次,特别是在使用onClick时。第一个调用是在执行onClick操作之前,第二个调用是在完成之后。
关闭你的BHO,在onClick上设置一个断点,跳过提交动作return jsSubmit()
,然后稍等一下,你应该能够在没有自动化的情况下引发同样的问题。
第二次调用OnBeforeNavigate时,任何延迟> 150ms都会导致页面加载/导航到结果失败。
修改强>
在尝试了我们自己的DHL页面自动化之后,我们目前没有上述时序的问题。