作者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://www.ptt.cc/bbs/C_Sharp/M.1437635663.A.358.html
※ 編輯: hcl012 (220.228.144.69), 07/23/2015 15:15:04
推 feeya: Sikuli可以解決 但是電腦就不能做其他事情喔 07/25 22:34
查了一下,這個用在圖形介面的自動化程式好像很方便
不知道可以發揮到甚麼程度
感謝情報
推 dontblame: 至接用原本登入的webBrowser 一樣觸發 click 去下載 07/26 08:24
根據我之前嘗試的結果
click只能用在網頁的元件上,沒辦法用在彈出來的下載視窗
如果只讓程式點選網頁上的下載連結的話
跑完程式就會看到大量的下載視窗卡在畫面上...
※ 編輯: hcl012 (220.228.144.69), 07/29/2015 10:54:54
→ flier268: ppt.cc/sLyQa 08/03 00:38
→ flier268: 前幾天剛剛用到 08/03 00:39
→ flier268: 實在不知道goo.gl跟ptt縮網址有什麼差別 08/06 14:43
推 jackiechin: System. Net. Webclient() 10/21 19:10