0

我正在尝试获取单击按钮后获得的网页的源代码。

我可以单击网页上的按钮。

 webBrowser1.Navigate(url);
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
    Application.DoEvents();
}               
webBrowser1.Document.GetElementById("downloadButton").InvokeMember("click");

现在,在此之后会出现一个新窗口。这是否可以获得点击后出现这个新窗口的源代码。

4

1 回答 1

0

一个hacky方法是:

  1. 将事件处理程序附加到按钮的“onclick”事件。
  2. 然后,一旦触发事件,使用Microsoft Internet Controls (SHDocVw)类型库以获取在 IE 中打开的最后一个 URL。
  3. 最后,导航到 URL,一旦加载了文档,就从webBrowser1.DocumentText属性中获取文档的源。

在您的项目中,添加对Microsoft Internet 控件类型库的引用(您可以在COM选项卡中找到它)。在文件顶部添加:

using SHDocVw;

编码:

webBrowser1.Navigate(url);
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
    Application.DoEvents();
}

// assign the button to a variable
var button = webBrowser1.Document.GetElementById("downloadButton");

// attach an event handler for the 'onclick' event of the button
button.AttachEventHandler("onclick", (a, b) =>
{
    // use the Microsoft Internet Controls COM library
    var shellWindows = new SHDocVw.ShellWindows();

    // get the location of the last window in the collection
    var newLocation = shellWindows.Cast<SHDocVw.InternetExplorer>()
        .Last().LocationURL;

    // navigate to the newLocation
    webBrowser1.Navigate(newLocation);
    while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }

    // get the document's source
    var source = webBrowser1.DocumentText;
});

button.InvokeMember("click");
于 2013-07-17T10:11:08.040 回答