我通过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)
答案 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);