我正在嘗試使用WebDriver瀏覽https站點並使用WebDriver下載文件。當我這樣做時,彈出文件下載對話框。在WebDriver中使用HTTP下載文件
WebDriver driver = new ChromeDriver();
driver.get("http://xxx/file1.txt");
我想知道有沒有什麼辦法只是調用一個方法的webdriver下載使用常規HTTPS請求,而不模擬點擊該文件?
在此先感謝。
我正在嘗試使用WebDriver瀏覽https站點並使用WebDriver下載文件。當我這樣做時,彈出文件下載對話框。在WebDriver中使用HTTP下載文件
WebDriver driver = new ChromeDriver();
driver.get("http://xxx/file1.txt");
我想知道有沒有什麼辦法只是調用一個方法的webdriver下載使用常規HTTPS請求,而不模擬點擊該文件?
在此先感謝。
沒有,至少沒有任何方式適用於所有瀏覽器。您可能可以配置某些瀏覽器(Firefox和Chrome)將文件下載到指定的位置而無需提示。然而,對於你所問的東西,你完全不需要硒。任何程序化的HTTP客戶端都可以。在Java中,我建議從Apache看HttpClient;在.NET中使用HttpWebRequest將完成工作。請注意,如果您要從中下載文件的網站需要驗證,則可能需要在HTTP請求中指定自定義標頭。
作爲一個便箋,您可能需要重新評估爲什麼您認爲您需要測試下載文件,如果它不如在瀏覽器外部執行HTTP請求那麼簡單。 This article詳細討論了這個問題,並提供了一個非常合理的論點,爲什麼測試下載文件是有問題的,而且往往是不必要的。
是的,你可以。您需要設置一個自定義的Chromedriver配置文件:
profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.prompt_for_download'] = false
profile['download.default_directory'] = download_directory
它不會提示任何對話框。 我對如何設置下載目錄和驗證該文件是否具有任何給定的大小here有更詳細的答案。
附加chromedriver交換機可以在這裏找到:http://peter.sh/experiments/chromium-command-line-switches/
謝謝,但我需要先登陸,然後獲取到下載頁面,抓取網址。由於授權過程,直接打到URL不起作用。 – zsong
爲了讓蘇格拉底得到片刻,瀏覽器如何僅使用HTTP下載文件?在許多情況下,身份驗證過程會設置一個包含身份驗證信息的cookie,然後將其傳遞到HTTP請求的頭文件中。幸運的是,HTTP客戶端庫通常允許您控制HTTP請求標頭,所以您只需要cookie信息。我將編輯我的答案以解決原始問題中未提及的問題。 – JimEvans
我很好奇這個答案downvote。這在技術層面上沒有錯誤。它的語氣不是煽動性的。它可能不是你想聽到的,但它並不減少答案的有用性或正確性。如果downvoters會留下他們認爲缺陷在答案中的意見,那麼可以改進。只需在沒有任何其他反饋意見的情況下進行投票,對回答者或後來尋找相同或類似問題的答案都沒有幫助。 – JimEvans