作者hcl012 (怪龙-卡西欧鲁)
看板C_Sharp
标题[问题] 关於用C#自动下载档案
时间Thu Jul 23 15:14:17 2015
目前我正在用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之类的方法吗?
如果最退而求其之的话
请问有在弹出下载视窗时先让程式停住而不要去点其他连结的办法吗?
这样至少我可以手动点那些下载视窗一个一个点完...
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.228.144.69
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1437635663.A.358.html
※ 编辑: hcl012 (220.228.144.69), 07/23/2015 15:15:04
1F:推 feeya: Sikuli可以解决 但是电脑就不能做其他事情喔 07/25 22:34
查了一下,这个用在图形介面的自动化程式好像很方便
不知道可以发挥到甚麽程度
感谢情报
2F:推 dontblame: 至接用原本登入的webBrowser 一样触发 click 去下载 07/26 08:24
根据我之前尝试的结果
click只能用在网页的元件上,没办法用在弹出来的下载视窗
如果只让程式点选网页上的下载连结的话
跑完程式就会看到大量的下载视窗卡在画面上...
※ 编辑: hcl012 (220.228.144.69), 07/29/2015 10:54:54
3F:→ flier268: ppt.cc/sLyQa 08/03 00:38
4F:→ flier268: 前几天刚刚用到 08/03 00:39
7F:→ flier268: 实在不知道goo.gl跟ptt缩网址有什麽差别 08/06 14:43
8F:推 jackiechin: System. Net. Webclient() 10/21 19:10