如何在模拟网页按钮点击后获取源代码

本文关键字:获取 源代码 按钮 网页 模拟 模拟网 | 更新日期: 2023-09-27 18:23:45

我正在尝试获取一个网页的源代码,点击按钮后即可获得。

我可以点击网页上的一个按钮。

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

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

如何在模拟网页按钮点击后获取源代码

一种hacky方法是:

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

在您的项目中,添加对Microsoft Internet Controls类型库的引用(您可以在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");