我的项目需求是这样的:在无headless的情况下实现保存mhtml格式的网页,假如允许有头的话我可以用ctrl+s模拟人工保存页面的方式加上selenium带的chromeOptions.add_argument(’–save-page-as-mhtml’) 功能即可实现,但是考虑到部署服务器以及效率等问题需要在无headless的模式下是最理想的,经过翻阅资料了解到了Chrome DevTools谷歌浏览器开发者工具远程调试协议中的Page.captureSnapshot方法来实现我的需求,代码如下(这里我只贴出demo)
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
from urllib.parse import urljoin
class Spider(object):
def __init__(self):
self.chromeOptions = self.get_profile()
self.browser = self.get_browser()
def get_profile(self):
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--headless') # 谷歌无头模式
chromeOptions.add_argument('--disable-gpu') # 禁用显卡
chromeOptions.add_argument('window-size=1280,800') # 指定浏览器分辨率
chromeOptions.add_argument("--no-sandbox")
return chromeOptions
def get_browser(self):
browser = webdriver.Chrome(chrome_options=self.chromeOptions)
return browser
def _get_page(self):
initial_url = 'https://www.breakyizhan.com/chromeconsole/2285.html'
self.browser.get(initial_url)
# 执行 Chome 开发工具命令,得到mhtml内容
res = self.browser.execute_cdp_cmd('Page.captureSnapshot', {})
with open('{}.mhtml'.format(initial_url.split('/')[-1]), 'w',newline='') as f:
f.write(res['data'])
if __name__ == '__main__':
l = Spider()
l._get_page()
l.browser.quit()
版权声明:本文为weixin_42603784原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。