首页 > 解决方案 > c#在Web浏览器中调用click后获取新页面的URL

问题描述

我必须使用 C# 中的应用程序控制台浏览某些页面,我有一个已知的 URL 作为起始页面,但其他 URL 未知,我通过单击起始页面中的按钮来访问它们。
这是我需要在页面上单击的按钮的代码:

<input name="ctl00$ContentPlaceHolder1$btn_invia" type="button" id="myId" onclick="ReDirect();" class="myClass" value="BUTTON TEXT" />

我尝试使用此代码导航到起始页,它可以工作:

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

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

  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();
  }
}

当我单击按钮时,它会加载一个新页面。但是当我称之为.InvokeMember("click");冻结时,我怎样才能让 WebBrowser wb1 转到新页面?

标签: c#console-applicationwebbrowser-control

解决方案


我发现我错了,我打电话wb1.Document.GetElementById("myId").InvokeMember("click");但 wb1 没有初始化,所以我没有调用.InvokeMember("click")现有元素。我是这样修改的:

((WebBrowser)sender).Document.GetElementById("myId").InvokeMember("Click");

Br_DocumentCompleted方法中,现在它可以工作了。但是现在我又遇到了一个问题:我是Br_DocumentCompleted这样修改方法的,因为我要在新页面中点击一个按钮,才能打开第三个页面:

    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;

        if (((WebBrowser)sender).Url.AbsoluteUri.Contains("startpage.aspx")) 
        {


            //Click on button
            ((WebBrowser)sender).ScriptErrorsSuppressed = true;
            ((WebBrowser)sender).Document.GetElementById("myId").InvokeMember("Click");
        }
        else if (((WebBrowser)sender).Url.AbsoluteUri.Contains("page1.aspx")) 
        {
            ((WebBrowser)sender).Document.GetElementById("btn_send").InvokeMember("Click");
        }
        else if (((WebBrowser)sender).Url.AbsoluteUri.Contains("page2.aspx")) 
        {
            //Some code
            Application.ExitThread();
        }   
    }

page1 上的“btn_send”有以下代码:

<input onclick="openEVERFANCY('#CChildren','N'); return false;" id=btn_send class=buttonVerifyDisp type=button value=GO>

当我调用((WebBrowser)sender).Document.GetElementById("btn_send").InvokeMember("Click");这个按钮时,它不会转到第三页,即使我有 DocumentCompleted 事件处理程序


推荐阅读