selenium的截图功能在chrome下无法实现,但是可以操作滚动条来一屏一屏的截图,然后再合并成一张图,解决方案如下:
def test_capture(url, w_pix,h_pix):
try:
self.driver.set_window_size(w_pix,h_pix)
self.driver.get(url)
self.driver.implicitly_wait(5)
i = 0
img_list = []
while i<30:
js="var q=document.body.scrollTop="+ str(i*wap_pixs[pix][1])+";"
self.driver.execute_script(js)
time.sleep(1)
js1 = "return document.body.scrollHeight-document.body.scrollTop"
s= self.driver.execute_script(js1)
if h_pix >= s:
break
else:
self.driver.save_screenshot(str(i)+'.png')
img_list.append(str(i)+'.png')
i += 1
image_merge(img_list)
except:
print 'error'
from PIL import Image
def image_merge(images, output_dir='', output_name='merge.jpg', restriction_max_width=None, restriction_max_height=None):
"""垂直合并多张图片
images - 要合并的图片路径列表
ouput_dir - 输出路径
output_name - 输出文件名
restriction_max_width - 限制合并后的图片大宽度,如果超过将等比缩小
restriction_max_height - 限制合并后的图片大高度,如果超过将等比缩小
"""
def image_resize(img, size=(1500, 1100)):
"""调整图片大小
"""
try:
if img.mode not in ('L', 'RGB'):
img = img.convert('RGB')
img = img.resize(size)
except Exception, e:
pass
return img
max_width = 0
total_height = 0
# 计算合成后图片的宽度(以宽的为准)和高度
for img_path in images:
if os.path.exists(img_path):
img = Image.open(img_path)
width, height = img.size
if width > max_width:
max_width = width
total_height += height
# 产生一张空白图
new_img = Image.new('RGB', (max_width, total_height), 255)
# 合并
x = y = 0
for img_path in images:
if os.path.exists(img_path):
img = Image.open(img_path)
width, height = img.size
new_img.paste(img, (x, y))
y += height
if restriction_max_width and max_width >= restriction_max_width:
# 如果宽带超过限制
# 等比例缩小
ratio = restriction_max_height / float(max_width)
max_width = restriction_max_width
total_height = int(total_height * ratio)
new_img = image_resize(new_img, size=(max_width, total_height))
if restriction_max_height and total_height >= restriction_max_height:
# 如果高度超过限制
# 等比例缩小
ratio = restriction_max_height / float(total_height)
max_width = int(max_width * ratio)
total_height = restriction_max_height
new_img = image_resize(new_img, size=(max_width, total_height))
if not os.path.exists(output_dir):
os.makedirs(output_dir)
save_path = '%s/%s' % (output_dir, output_name)
new_img.save(save_path)
for img_path in images:
os.remove(img_path)
return save_path
大致这么个思路