用于Chrome CDP(Chrome DevTools协议)的固定Web Socket端点

zsohkypk  于 2023-01-28  发布在  Go
关注(0)|答案(1)|浏览(363)

我使用Chrome CDP实现一些任务的自动化。
必须首先启动带有CDP的chrome:

chromium-browser --remote-debugging-port=9222

它会报告类似于

DevTools listening on ws://127.0.0.1:9222/devtools/browser/3e3152c6-20fc-4cea-a9d2-60e4e6b8ad70

我必须手动将ws://...的URL复制到配置文件中才能继续我的任务。我可能可以使用python的subprocess.Popen来解决这个问题,并提取URL,但是否有一种方法可以使此URL可配置或至少是固定的?

6mzjoqzu

6mzjoqzu1#

多亏了wOxxOm!它真的可以从http://127.0.0.1:9222/json/version中读取(文档)
作为一种替代方法,我编写了Python脚本来启动它并获取端点:

from subprocess import Popen, PIPE

class Browser:
    BANNER = "DevTools listening on "

    def __init__(self, path="/usr/bin/chromium-browser",
            port=9222, ignore_tls_errors=False):

        cmd = [path, f"--remote-debugging-port={port}"]
        if ignore_tls_errors:
            cmd.append("--ignore-certificate-errors")

        self.process = Popen(cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True)

        output = ""
        for line in self.process.stderr:
            output += line
            if self.BANNER in output:
                start_pos = output.find(self.BANNER) + len(self.BANNER)
                end_pos = output.find("\n", start_pos)
                self.url = output[start_pos:end_pos]
                break

    def close(self):
        self.process.terminate()

if __name__ == "__main__":
    try:
        b = Browser()
        print("URL:", b.url)
    finally:
        b.close()

相关问题