[问题] 关于用C#自动下载档案

楼主: hcl012 (怪龙-卡西欧鲁)   2015-07-23 15:14:17
目前我正在用C#写自动下载器
主要用处是登入某个需要帐号密码的网站下载档案
目前已经用WebBrowser成功写出了自动登入网站的部分
也可以从网站上撷取到需要下载的档案URL清单
但是问题出在下载档案
我一开始是用HtmlElement.InvokeMember("click")来做的
大致结构写法如下:
HtmlDocument doc = WebBrowser.Document;
HtmlElementCollection a_array = doc.GetElementsByTagName("a");
foreach (HtmlElement a in a_array)
{
if(是我要的档案URL)
{
a.InvokeMember("Click");
}
}
但是,这样的写法因为会弹出下载视窗而无法自动化
而且因为我是用foreach来扫描网页所有超连结的关系
就算我手动按掉下载视窗后
程式也不会等我而自动把后面还没下载的所有连结都点过了
后来查到用WebClient.DownloadFile来直接下载档案到指定位置
于是把程式改成这样:
HtmlDocument doc = WebBrowser.Document;
HtmlElementCollection a_array = doc.GetElementsByTagName("a");
foreach (HtmlElement a in a_array)
{
if(是我要的档案URL)
{
String href = a.GetAttribute("href");
WebClient client = new WebClient();
client.DownloadFile(href, @"C:\MyDownload\" + filename);
}
}
使用后却没有任何东西下载到我指定的资料夹里
推测是因为没有登入而抓取失败
那个网站是需要帐号密码登入后才能接触到里面档案的
想请问一下板上有人知道用WebBrowser下载档案而不会弹出下载视窗
或是用WebClient可以取得WebBrowser的Session之类的方法吗?
如果最退而求其之的话
请问有在弹出下载视窗时先让程式停住而不要去点其他连结的办法吗?
这样至少我可以手动点那些下载视窗一个一个点完...
作者: feeya (24 August 升格为乡民)   2015-07-25 22:34:00
Sikuli可以解决 但是电脑就不能做其他事情喔
作者: dontblame (占卜师)   2015-07-26 08:24:00
至接用原本登入的webBrowser 一样触发 click 去下载
作者: flier268 (Flier)   2015-08-03 00:38:00
ppt.cc/sLyQa前几天刚刚用到
作者: HwangTW (谷歌翻译王)   2015-08-05 03:10:00
楼上可用 https://goo.gl 吗?
作者: flier268 (Flier)   2015-08-06 14:43:00
https://goo.gl/C6ynp4实在不知道goo.gl跟ptt缩网址有什么差别

Links booklink

Contact Us: admin [ a t ] ucptt.com