截图后PhantomJS的内存消耗量很大

时间:2015-08-31 07:16:31

标签: c# selenium selenium-webdriver phantomjs

我通过Selenium使用PhantomJS,并在一个网站上遇到了大量图片的问题。

当我尝试截屏时PhantomJS进程内存消耗非常高,≈400-450MB(截屏前≈100MB)

class mod(gr.sync_block): """ docstring for block mod """ def __init__(self): gr.sync_block.__init__(self, name="mod", in_sig=[np.byte], out_sig=[np.complex64]) def work(self, input_items, output_items): in0 = input_items[0] out = output_items[0] result=do(....) out[:]=result return len(output_items[0]) 更好,≈70-100MB。

有没有办法在不完全禁用图像的情况下解决此问题?也许只能截取可见区域的屏幕截图而不是整页?

使用其他WebDrivers(例如Chrome),它运行正常。

ValueError: could not broadcast input array from shape (122879) into shape (4096)

(这不是我使用的网站,因为它需要登录/密码验证,只是谷歌的一些图像重的网站,内存消耗有点低但仍然巨大 - ≈300MB)

2 个答案:

答案 0 :(得分:1)

方法TakeScreenshot返回一个Bitmap对象。您提供的代码示例不会丢弃此对象,因此GDI对象在内存中闲置很长时间(可能是无限期)。

将您的代码更改为:

public static void SaveScreenshot(RemoteWebDriver driver)
{
    try
    {
        using(var screenshot = driver.TakeScreenshot())
        {
            screenshot.SaveAsFile(DateTime.Now.Ticks + ".jpg", ImageFormat.Jpeg);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

答案 1 :(得分:0)

试试这个:

Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
ss.SaveAsFile(DateTime.Now.Ticks + ".jpg", ImageFormat.Jpeg);