单击控制台应用程序中的html按钮

时间:2017-04-24 09:30:38

标签: c# .net windows console-application

我正在构建一个控制台应用程序,我在其中获取页面的html并使用HtmlAgilityPack解析它。修改此页面上的某些表单值后,我想通过单击同一页面上的提交按钮来提交它。我能够使用它的ID属性获取按钮,但无法以编程方式单击它。 那我该怎么办呢?基本上我想在填写详细信息后提交表单,所以我可以通过我的控制台应用程序实现这一点。

1 个答案:

答案 0 :(得分:0)

您无法从控制台应用程序发布HTML文档。 获取文档意味着您解析了HTML文本,但是您没有链接到运行该页面的Web服务器,这将会收听您的回发。

您唯一的办法是在您的控制台应用程序上运行WebBrowser,导航到您的页面,导航发生后,检索文档文本,根据需要解析它,然后通过Web浏览器调用您的Click方法按钮。

这是一个小样本:

class Program
{
    private static WebBrowser wb1 = new WebBrowser();

    [STAThread]
    static void Main(string[] args)
    {
        runBrowserThread(new Uri("http://www.google.it"));
    }

    private static void runBrowserThread(Uri url)
    {
        var th = new Thread(() => {
            var br = new WebBrowser();
            br.DocumentCompleted += Br_DocumentCompleted; ;
            br.Navigate(url);
            Application.Run();
        });
        th.SetApartmentState(ApartmentState.STA);
        th.Start();
    }

    private static void Br_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        //Retrieve string content of document
        var document = ((WebBrowser)sender).Document;
        var documentAsIHtmlDocument3 = (mshtml.IHTMLDocument3)document.DomDocument;
        var content = documentAsIHtmlDocument3.documentElement.innerHTML;

        //Parse content with html agility pack or whatever

        //Click on button
        wb1.Document.GetElementById("myId").InvokeMember("click");

        Application.ExitThread();
    }
}

考虑一下我没有测试它,但应该是一个起点。此外,如果您有一个复杂的页面,您可能不想依赖InternetExplorer(默认WebBrowser)来加载您的页面,但可能会考虑将Firefox与GeckoFX一起使用,在这种情况下您必须以某种方式编写HTML检索部分与IE对手不同。

如果您想尝试此示例,请记住包含System.Windows.Forms和Microsoft.mshtml