【问题标题】:Download file with PhantomJS使用 PhantomJS 下载文件
【发布时间】:2015-12-29 23:26:11
【问题描述】:

我正在尝试使用PhantomJS 下载文件,但是当我点击下载时,没有下载文件,我读到Phantomjs 不支持下载,但我需要它,你能帮帮我吗?

这是我尝试下载时的部分代码:

try
{
  checkbox = wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//form[@id='formDownload']//table[@class='fileTables']//tbody//tr//td//input[@class='checkbox']")));      
  checkbox[countLine - 1].Click();      
  wait.Until(ExpectedConditions.ElementExists(By.Id("all"))).Click();
}
catch (Exception ex)
{
   throw new Exception(ex.Message);
}

【问题讨论】:

    标签: c# selenium webdriver phantomjs


    【解决方案1】:

    好的,你需要做的是:

    1. 点击html中的文件时,需要找到文件的链接。

    2. 您需要获取链接并发出 httpRequest 以获取文件。

    这里是请求的全部功能(我为你做的很容易,只需找到链接)

    public static bool DownloadFile(string url, IWebDriver driver)
            {
                try
                {
                    // Construct HTTP request to get the file
                    HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
                    httpRequest.CookieContainer = new System.Net.CookieContainer();
    
                    for (int i = 0; i < driver.Manage().Cookies.AllCookies.Count - 1; i++)
                    {
                        System.Net.Cookie ck = new System.Net.Cookie(driver.Manage().Cookies.AllCookies[i].Name, driver.Manage().Cookies.AllCookies[i].Value, driver.Manage().Cookies.AllCookies[i].Path, driver.Manage().Cookies.AllCookies[i].Domain);
                        httpRequest.CookieContainer.Add(ck);
                    }
    
                    httpRequest.Accept = "text/html, application/xhtml+xml, */*";
                    httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";
    
                    //HttpStatusCode responseStatus;
    
                    // Get back the HTTP response for web server
                    HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
                    Stream httpResponseStream = httpResponse.GetResponseStream();
    
                    // Define buffer and buffer size
                    int bufferSize = 1024;
                    byte[] buffer = new byte[bufferSize];
                    int bytesRead = 0;
    
                    // Read from response and write to file
                    FileStream fileStream = File.Create(FilePath + "\\" + FileName + ".xls");
                    while ((bytesRead = httpResponseStream.Read(buffer, 0, bufferSize)) != 0)
                    {
                        fileStream.Write(buffer, 0, bytesRead);
                    }
    
                    return true;
                }
                catch (Exception ex)
                {
                   return false;
                }
            }
    

    【讨论】:

    • 如果下载依赖于会话(cookie)怎么办?
    • 你可以看到我在我的函数中处理cookie
    • 而 phantomJS 拥有你需要的所有 cookie。
    • 我会的,我在一个显示文件链接的网站上测试了这个功能,它有效,所以我知道它有效,现在我只需要找到这个链接,不过,非常感谢引起注意。
    • 我正在使用 WebClient 并且遇到了问题,但是添加 UserAgent 标头对我来说完全不同。没想到...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 2016-12-15
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多