Webdriver PhantomJS全页截图,使用PIL解决?

时间:2018-03-27 20:44:44

标签: python selenium phantomjs python-imaging-library

我的脚本使用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提供相同的整页截图)?

也许是一种更有效的方法来获得相同的结果?

也许更简单的事情,我可能会过度复杂?

0 个答案:

没有答案