使用没有url的WebBrowser自动下载文件

Sha*_*th 7 c# browser download web-crawler winforms

我一直在使用System.Windows.Forms.WebBrowser编写一个用C#编写的WebCrawler.我试图从网站上下载文件并将其保存在本地计算机上.更重要的是,我希望这是完全自动化的.可以通过单击调用javascript函数的按钮来启动文件下载,该函数会激活下载,显示"是否要打开或保存此文件?"对话框.我绝对不想手动点击"另存为",并输入文件名.

我知道HttpWebRequest和WebClient的下载功能,但由于下载是用javascript启动的,我现在知道该文件的URL.Fyi,javascript是一个doPostBack函数,可以更改某些值并提交表单.

我已经尝试将重点放在WebBrowser的save as对话框上,以便从那里自动化它,但没有取得多大成功.我知道有一种方法可以强制下载保存,而不是通过向http请求添加标头来保存或打开,但我不知道如何指定要下载的文件路径.

Zyp*_*rax 5

我认为你应该阻止下载对话框显示.这可能是一种方法:

  • Javascript代码会导致您的WebBrowser控件导航到特定的Url(导致下载对话框出现的原因)

  • 要防止WebBrowser控件实际导航到此Url,请将事件处理程序附加到Navigating事件.

  • 在您的导航事件中,您必须分析这是否是您想要停止的实际导航操作(这是下载URL,也许是检查文件扩展名,必须有可识别的格式).使用WebBrowserNavigatingEventArgs.Url执行此操作.

  • 如果这是正确的URL,请通过设置WebBrowserNavigatingEventArgs.Cancel属性来停止导航.

  • 使用HttpWebRequest或WebClient类继续自己下载

有关该事件的更多信息,请查看此页面:http:
//msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.navigating.aspx


Vik*_*lot 5

http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/d338a2c8-96df-4cb0-b8be-c5fbdd7c9202/?prof=required中可以找到类似的解决方案。

如果有直接URL(包括下载文件名),则此方法非常有效。

但有时某些URL动态生成文件。因此,URL没有文件名,但是在请求该URL之后,某些网站会动态创建文件,然后出现打开/保存对话框。

例如,某些链接可以动态生成pdf文件。

如何处理这类网址?