背景
- python
- selenium
- 截长图
目标
- 滚动截图
过程
def get_screenshot_scroll(self, scroll=500, scroll_interval=0.1):
'''
滚动截图
注:必须开启无界面模式,即:--headless
scroll 默认 100 ,向下滚动的像素数量
scroll_interval 默认0.1s,滚动间隔
width 截图的宽度 默认1440
'''
try:
self.logger.info('开始截图,当前地址:' + self.browser.current_url)
js_height = "return document.body.clientHeight"
k = 1
height = self.browser.execute_script(js_height)
while True:
if k * scroll < height:
js_move = "window.scrollTo(0,{})".format(k * scroll)
self.browser.execute_script(js_move)
time.sleep(scroll_interval)
height = self.browser.execute_script(js_height)
k += 1
else:
break
# 截图总高度最大量
if height > 40000:
break
# 接下来是全屏的关键,用js获取页面的宽高,如果有其他需要用js的部分也可以用这个方法
width = self.window_size_width
# width = self.browser.execute_script("return document.body.scrollWidth")
height = self.browser.execute_script("return document.body.scrollHeight")
self.logger.info('----->scroll screenshot width:{} height:{}'.format(width, height))
# 将浏览器的宽高设置成刚刚获取的宽高
self.browser.set_window_size(width, height)
# 截图
# png_file = f'1.png'
# self.browser.save_screenshot(png_file)
bytes_content = self.browser.get_screenshot_as_png()
self.logger.info('滚动截图完成')
return bytes_content
except Exception as e:
self.logger.info('-----> get screenshot err:' + e)
展示示例
capture.jpg
总结
- 注:必须开启无界面模式,即:--headless
致谢
- 参考了很多网上的文章
- 如果有对您有帮助请点赞