[英]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.