繁体   English   中英

从python运行无头Chrome

[英]Running headless Chrome from python

我正在尝试使用无头的chrome打印到pdf。 我正在使用Windows 10命令提示符。 如果我执行以下操作,那么一切都会按预期进行:

cd "C:\Program Files (x86)\Google\Chrome\Application"

chrome --headless --print-to-pdf=c:\Users\timmc\Documents\a.pdf --disable-gpu https://www.google.com/

但是,最终我想使用subprocess.call()从python脚本运行此命令,并且“程序文件(x86)”中的空格似乎引起了麻烦。 我看过堆栈溢出的其他答案,但没有发现任何有效的方法。 如果我尝试以下操作:

C:\"Program Files (x86)"\Google\Chrome\Application\chrome --headless --print-to-pdf=c:\Users\timmc\Documents\b.pdf --disable-gpu https://www.google.com/

我得到了一些非常不寻常的行为,其中,谷歌打开,但不是在无头模式下,它打开了两个标签,一个与谷歌,一个试图打开诸如program%20--original-process-start-time%3D13156438844432514%20--快速启动%20files%20%28x86%29。

任何人都可以解释上述行为吗?

有没有一种简单的方法来处理空间,该空间可以在subscript.call()的python脚本中工作?

是否有另一种方法可以实现同一目标? (我宁愿不使用硒,而是直接使用无头铬)。

编辑:我最终希望从我的python脚本运行的代码是:

subprocess.call('C:\"Program Files (x86)"\Google\Chrome\Application\chrome --headless --print-to-pdf=c:\Users\timmc\Documents\b.pdf --disable-gpu https://www.google.com/',shell=True)

我没有运行Windows,所以无法为您做任何测试,但我可能可以为您指明正确的方向。

首先,它是一个更好的做法是使用的参数列表来call ,而不是一个大的字符串。 例如subprocess.call(["echo", "one", "two"])而不是subprocess.call("echo", "one two") 这样,您不必担心引用过多,因为.call每个参数都应解释为chrome的单个参数,即使它们包含空格。

此外,文档底部还有一些有关Windows中命令行字符串解释如何发生的信息:subprocess.call([“ ls”,“ -l”])

17.1.5.1。 在Windows上将参数序列转换为字符串在Windows上,将args序列转换为可以使用以下规则(与MS C运行时使用的规则相对应)进行解析的字符串:

参数由空格分隔,空格可以是空格或制表符。 用双引号引起来的字符串将解释为单个参数,而不管其中包含的空格如何。 可以将带引号的字符串嵌入参数中。 在双引号前加反斜杠的解释为文字双引号。 反斜杠将按字面意义进行解释,除非它们紧接在双引号之前。 如果反斜杠紧接在双引号之前,则每对反斜杠都将解释为文字反斜杠。 如果反斜杠的数量为奇数,则最后一个反斜杠将按照规则3中的说明转义下一个双引号。

https://docs.python.org/2/library/subprocess.html#converting-argument-sequence

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM