[問題] 關於用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