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