在屏幕抓取中禁用FileDownload弹出窗口(使用Webbrowser控件)

问题描述 投票:1回答:1

问题:我正在寻找规避FileDownload弹出窗口并自动下载文件的方法。

实施细节在Windows应用程序中,我正在使用Webbrowser组件创建屏幕抓取应用程序。我的webBrowser1用一个视图呈现,该视图包含一个表(实际页面中使用的Gridview),该表带有一个包含锚元素的td列(除其他td列外)。单击锚点将从SharePoint下载相关文件。一个样本:

<td><a href="javascript:__doPostBack('ctl00$PlaceHolderMain$TOC$ctl00','DownloadFile$0')">File 1</a></td>

要自动执行下载,在Windows窗体中,我确实有一个“下载”按钮,试图在其中下载表中的第一个文件(最终将下载所有文档)。

我的挑战是下载与FileDowload弹出窗口一起显示的文件。enter image description here有没有一种方法可以禁用此弹出窗口,并自动将文件下载到某个文件夹中。我了解它正在尝试模仿IE功能。我的下载代码如下:

private void btnDownload_Click(object sender, EventArgs e)
        {
            webBrowser1.Document.InvokeScript("__doPostBack", new string[] { "ctl00$PlaceHolderMain$TOC$ctl00", "DownloadFile$0"});

        } 

我尝试了各种方法。一种这样的方法是使用“ urlmon.dll”并使用其URLDownloadToFile方法。但是,由于该URL不是普通URL,因此它仍会继续提供FileDownload Popup。

[我尝试的另一种方法是使用“ user32.dll”自动完成点击,并使用SendKeys发送{TAB}和{Enter}键,但是我无法获取此弹出窗口的句柄。

IntPtr hwnd = FindWindow("#32770", "File Download");
        IntPtr a5 = FindWindow("#32770 (Dialog)", "File Download");
        IntPtr nullptr = (IntPtr)0;
        if (hwnd != nullptr)
        {
            SetActiveWindow(hwnd);
            SendKeys.SendWait("{TAB}");
            //SendKeys.SendWait("%S");
        }
c# webbrowser-control screen-scraping
1个回答
0
投票

//下载事件开始或下载按钮后,单击文件下载弹出窗口//将显示在webbrowser控件中。输入以下代码

            Thread now = new Thread(() =>
            {
                Thread.Sleep(2000); 
                // string nu = GetActiveWindowTitle();
                SendKeys.SendWait("{Tab}");
                SendKeys.SendWait("{Tab}");
                SendKeys.SendWait("{Tab}");
                SendKeys.SendWait("{Enter}"); 
                Thread.Sleep(4000); 
                // now create filename path
                string filepath=@"c:\download\thisdownloadfilehere.pdf"
                SendKeys.SendWait(filepath); 
                SendKeys.SendWait("{Tab}");
                SendKeys.SendWait("{Tab}");
                SendKeys.SendWait("{Tab}");
                SendKeys.SendWait("{Enter}");

            });
            now.Start(); 
© www.soinside.com 2019 - 2024. All rights reserved.