我的脚本使用PhantomJS获取通过ajax生成的报告的整页屏幕截图,这些页面具有相同的报告结构但数据不同的许多不同页面。这些报告是黑色和白色的,长度不一,但宽度相同,因此我很难在webdriver上更改窗口大小,以便为所有报告完成相同的所需屏幕截图。 PhantomJS在将这些png保存到不再需要的确切长度方面做得非常出色。
随着PhantomJS被弃用,我找到了一些创意,可以为我的脚本找到一个补丁,产生与PhantomJS相同的整页截图。
这是我使用无头火狐,硒,PIL->图像。
快吗?差远了。它是否适用于我需要它做的事情?肯定。
# 1120 is fixed report width
# 5000 is a gross overestimate of 'longest' report
driver.set_window_size(1120, 5000)
driver.get(url_of_report)
driver.save_screenshot('report.png')
im = Image.open('report.png')
width, height = im.size
# // auto round down
# find the middle of the image due to some padding on the report edges
x = int(im.size[0] // 2)
# total length of image
y = int(im.size[1])
# for loop, starts at bottom center of image, using getpizel until border is found
for pixels in range(1, y):
L_im = im.convert('L')
z = y - pixels
k = L_im.getpixel((x, z))
# report has a bottom border that is always black => 0
# the space between that border is white => 255
# if I find black, k is 0 then I know the report ends at that pixel
if k == 0:
print('The length of the report is {}.'.format(z))
break
# use newly found z to crop report perfectly
imgCropped = im.crop((0, 0, im.size[0], im.size[1] - z))
imgCropped.save(filename)
所以我的问题是,有没有更有效的方法来获得我想要的结果(PhantomJS提供相同的整页截图)?
也许是一种更有效的方法来获得相同的结果?
也许更简单的事情,我可能会过度复杂?