从 python 运行无头 Chrome

蒂姆-麦克拉赫

我正在尝试使用 chrome headless 打印到 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/

我得到了一些非常不寻常的行为,谷歌打开但不是无头模式,它打开两个标签,一个用谷歌,一个试图打开类似程序%20--original-process-start-time%3D13156438844432514%20--快速启动%20files%20%28x86%29。

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

有没有一种简单的方法来处理空格,它可以使用 subprocess.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)
货物23

我不运行 Windows,所以我不能为你做任何测试,但我可能会为你指明正确的方向。

首先,使用参数列表来call代替大字符串是更好的做法例如,subprocess.call(["echo", "one", "two"])而不是subprocess.call("echo", "one two"). 通过这样做,您不必担心引用太多,因为每个参数 to.call都应该被解释为单个参数 to 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章