c# - MSHTML COM 单击提交按钮时出现问题

标签 c# .net wpf screen-scraping webbrowser-control

我在使用 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/

相关文章:

c# - 将难以形成的 XML 反序列化为 C# 对象

.net - 组件 vs 集成 vs 功能测试

wpf - XAML/Silverlight 复选框工具提示

wpf - 可重复使用的多边形

wpf - 获取多行 wpf 文本 block 中的所有文本

c# - 后台任务正在跳过计划,有时每 60 分钟更新一次

Javascript Ajax 前端调用 asp.net C# 后端

c# - Azure 表存储范围查询,常用条件包含在方法中

.net - WPF:如何使文本框动态调整大小但防止自动调整大小?

c# - 使用 CustomAttributeBuilder 的参数不匹配(装箱十进制?)