引言

背景

由于有一些小需求需要控制浏览器批量执行请求,最简单的方案是使用 DrissionPage 来实现,遂有了下面的问题。

问题

通过命令行传入 remote-debugging-port=9111 参数,但是调试了一天,一直不生效,各种方法都试过了,kill 掉浏览器也不行,重启电脑也不行,在谷歌各种查,一直没啥头绪。

贴一下有问题的命令行,大佬应该一眼就能看出来问题。

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" "--restart --flag-switches-begin --enable-features=ParallelDownloading --flag-switches-end --remote-debugging-port=9111"

问题排查

问题现象

在执行了上述的命令行后,Chrome 正常启动,访问 chrome://version/ 发现命令行上面也是正常的带了参数,见下图:

image-20241014220306814

但是查询系统端口,就是没有监听 9111 端口,见下图:

image-20241014220348745

问题解决

后来开了一台 macOS 的虚拟机,在虚拟机中重新操作了一番,才终于发现,原来问题在命令行参数上面。

贴一下正常可以使用的命令行:

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --restart --flag-switches-begin --enable-features=ParallelDownloading --flag-switches-end --remote-debugging-port=9111

对比后可以发现,两个命令中可执行文件后面的参数,一个使用了双引号包裹,另一个没有,问题正是出在这里。如果用双引号包裹的话,Chrome 就会把它当成一个参数来对待,但是不知道为什么启动的时候没有报错,而且 chrome://version/ 页面中的命令行参数也是正常的,完全没法发现问题。

后来改了一下参数,马上就可以用了:

image-20241014220712732

原因分析

为什么会发生这个问题呢,我们使用 Pythonargparse 来尝试一下。

import argparse

parser = argparse.ArgumentParser(description="命令行参数解析示例")

parser.add_argument('--gender', type=str, help="用户的性别")
parser.add_argument('--gender2', type=str, help="用户的性别2")

args = parser.parse_args()
if args.gender:
    print(f"性别: {args.gender}")

if args.gender2:
    print(f"性别: {args.gender2}")

执行一下:

image-20241014221018726

通过图片可以看到,使用双引号包裹的时候,参数都被传递给了第一个 gender 参数,在不使用双引号包裹的时候,参数正常的被传递给了两个 gender

总结

为什么会发生这个问题呢,因为在 macOS 中的命令行执行可执行文件时,路径中的空格要加反斜杠来转义,我当时为了方便,就将可执行文件和参数都加上了,后续一直使用复制的命令,就导致在这里耽误了一天。。。


LLLibra146
35 声望6 粉丝

会修电脑的程序员