我在使用 MSHTML 从该网站截取一些数据时遇到问题组件。我的 WPF 窗体上有一个 WebBrowser
控件。
我检索 HMTL 元素的代码位于 WebBrowser LoadCompleted
事件中。在我将数据值设置为 HTMLInputElement
并调用 HTMLInputButtonElement
上的点击方法后,它拒绝提交请求并显示下一页。
我分析按钮上的 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 访问的网页的 URL, http://track.dhl.co.uk/tracking/wrd/run/wt_xtrack_pw.entrypoint .
最佳答案
有很多可能性:
您可以尝试将您的代码放在 其他事件,例如导航 已完成,或下载已完成。
您可能需要在 click() 函数之后显式评估 OnClick 事件。
使用 MS WebBrowser 控件是 比使用 MSHTML COM 更容易。
- 为了让生活更轻松,您可以只使用网络抓取库(例如 IRobotSoft ActiveX 控件)来自动执行整个过程。
关于c# - MSHTML COM 单击提交按钮时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3260207/