Python 硒+;ChromeDriver printToPDF

Python 硒+;ChromeDriver printToPDF,python,selenium,selenium-chromedriver,Python,Selenium,Selenium Chromedriver,有没有办法从python+selenium调用chromedriver的方法 PhantomJS有一个类似的方法,可以直接保存为pdf,这只能从PhantomJS的特权客户端REPL获得。演示如何使用自定义phantomjs webdriver命令(/session/$sessionId/phantom/execute)调用this.render(),对正在运行的selenium驱动程序进行修补以调用它 对于chromedriver有类似的方法吗?要么像phantomjs的execute命令,允

有没有办法从python+selenium调用chromedriver的方法

PhantomJS有一个类似的方法,可以直接保存为pdf,这只能从PhantomJS的特权客户端REPL获得。演示如何使用自定义phantomjs webdriver命令(
/session/$sessionId/phantom/execute
)调用
this.render()
,对正在运行的selenium驱动程序进行修补以调用它

对于chromedriver有类似的方法吗?要么像phantomjs的
execute
命令,允许调用devtools方法;还是通过自定义驱动程序命令直接调用
printToPDF
的方法

(注意:我正在尝试呈现一篇文章的结果html,因此像wkhtmltopdf这样的替代解决方案将不起作用。我可以回过头来使用selenium的屏幕截图->png,但出于存储目的,这很麻烦)。

可以从DevTool API调用。但是,该命令是实验性的,并非在所有平台上都实现:

从selenium导入webdriver
导入json,base64
def send_devtools(驱动程序,cmd,参数={}):
resource=“/session/%s/chromiu/send_command_和_get_result”%driver.session_id
url=驱动程序、命令执行器、url+资源
body=json.dumps({'cmd':cmd,'params':params})
响应=驱动程序、命令执行器、请求('POST',url,正文)
如果响应['status']:
引发异常(response.get('value'))
返回响应。get('value')
def另存为pdf(驱动程序、路径、选项={}):
# https://timvdlippe.github.io/devtools-protocol/tot/Page#method-printToPDF
结果=发送工具(驱动程序,“Page.printToPDF”,选项)
打开(路径“wb”)作为文件:
file.write(base64.b64解码(结果['data']))
options=webdriver.ChromeOptions()
选项。添加参数(“--headless”)
options.add_参数(“--disable gpu”)
driver=webdriver.Chrome(Chrome\u options=options)
驱动程序。获取(“https://www.google.co.uk/")
另存为pdf(驱动程序,r'page.pdf',{'scanner':False})

好的,仅供参考,以下是我如何在2019年使其工作而不产生异常:

def send_devtools(driver, cmd, params={}):
    resource = "/session/%s/chromium/send_command_and_get_result" % driver.session_id
    url = driver.command_executor._url + resource
    body = json.dumps({'cmd': cmd, 'params': params})
    response = driver.command_executor._request('POST', url, body)
    #print (response)
    if (response.get('value') is not None):
        return response.get('value')
    else:
        return None

def save_as_pdf(driver, path, options={}):
    # https://timvdlippe.github.io/devtools-protocol/tot/Page#method-printToPDF
    result = send_devtools(driver, "Page.printToPDF", options)
    if (result is not None):
        with open(path, 'wb') as file:
            file.write(base64.b64decode(result['data']))
        return True
    else:
        return False

谢谢,正是我想要的!虽然我得到了一个
printtopf未实现的
错误。我需要做些什么来启用实验特性吗?(Selenium报告它正在连接到Chrome 62.0.3202.62,ChromeDriver 2.32,Platform=Linux)。据我所知,该版本应该(?)具有printToPDF支持。请尝试使用金丝雀版本或最新版本(64.0.3249.0)啊,找到了。根据,目前仅在无头模式下可用。只要我打开它,一切都会很完美。欢迎使用SO!请编辑您的答案,并解释一下上下文,以及为什么它可以工作。有关更多指导,请参阅