背景
最近在做的一个 Web App,有个需要对 url 截图的需求,Google 了一番找到了使用 Python 和 Phantomjs 的方案,这里记录了如何使用以及遇到坑的解决方案。
一些坑
- 中文字体展示。
- Phantomjs 进程无法正常退出,导致服务器卡死。
安装
- 使用这个 Gist 安装 phantomjs。
- 使用
pip install selenium
,Selenium 文档。 - 安装中文字体:
apt-get install xfonts-wqy ttf-wqy-microhei
使用
import signal from selenium import webdriver def screenshot(): driver = webdriver.PhantomJS() # 设置加载页面超时时间 driver.set_page_load_timeout(12) # 设置窗口大小 driver.set_window_size(1024, 768) try: driver.get(url) # 截图保存到内存中,后续使用 Pillow 压缩图片 origin_png = self.driver.get_screenshot_as_png() except: return '' # 结束 Phantomjs 进程 finally: driver.service.process.send_signal(signal.SIGTERM) driver.quit()
注意事项:一定要使用 finally 语句结束 Phantomjs 释放资源
后续
目前部分国外网站无法截图,可以加上代理解决。