【问题标题】:How to get Pop up window control item from c# page如何从c#页面获取弹出窗口控件项
【发布时间】:2016-05-31 15:34:05
【问题描述】:

我正在为 Windows 应用程序的屏幕抓取应用程序工作

我可以使用我们的浏览器方法自动浏览登录页面和所有页面,有时必须使用“.Click”来触发某些页面上的按钮。

这就是问题所在。当我最后一次“单击”以获取我的数据时,Web 浏览器会打开一个新的资源管理器窗口(弹出窗口),其中包含另一个链接按钮,我必须使用 c# 单击此链接按钮以获取我的最终数据。

如何访问新窗口(弹出窗口)来抓取它?

我正在使用以下代码,此代码在新的弹出窗口中打开 URL。

 HtmlElement toollinkbutton = WebBrowser1.Document.Window.Document.Body.Document.GetElementsByTagName("a")[48];
toollinkbutton .InvokeMember("click");

【问题讨论】:

    标签: c# asp.net web-scraping screen-scraping web-controls


    【解决方案1】:

    新窗口可能是由于 target="_blank" 或 javascript 而使用 InvokeMember 将导致新窗口打开。向 WebBrowser 控件 NewWindow 事件添加一个处理程序,并通过调用 Navigate() 来处理单击。

    private string url = "";
    
    public Form1()
    {
        InitializeComponent();
        WebBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
        WebBrowser1.NewWindow += new System.ComponentModel.CancelEventHandler(webBrowser1_NewWindow);
    }
    
    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlElementCollection links = WebBrowser1.Document.Links;
        foreach (HtmlElement var in links)
        {
            var.AttachEventHandler("onclick", LinkClicked);
        }
    }
    
    private void LinkClicked(object sender, EventArgs e)
    {
    
        HtmlElement link = WebBrowser1.Document.ActiveElement;
        url = link.GetAttribute("href");
    }
    
    void webBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e)
    {
        WebBrowser webBrowser = (WebBrowser)sender;
        HtmlElement link = webBrowser.Document.ActiveElement;
        Uri urlNavigated = new Uri(link.GetAttribute("href"));
        WebBrowser1.Navigate(url);
        e.Cancel = true;
    }
    

    【讨论】:

    • 感谢您的回复。但解决方案没有按我预期的那样工作。我正在废弃一个 HTTPS 网站。我正在使用 Windows 应用程序中的 WebBrowser 控件并将页面加载到这些浏览器并解析数据。当登录页面完成并单击链接时,它现在会打开一个新的 Internet Explorer 窗口作为弹出窗口。但是现在我无法获取这些弹出数据,因为它在单独的 Internet 窗口中运行。如何在这些弹出窗口中获取这些数据。
    • 我正在弹出被阻止的消息,即使我在使用上述代码导航时允许从浏览器中弹出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多