python - 使用 pyppeteer 连接到现有的 chrome

标签 python windows google-chrome pyppeteer

我想使用 pyppeteer 连接到现有的(已由用户打开,没有任何额外标志)Chrome 浏览器这样我就可以控制它了。
我之前几乎可以执行所有手动操作(例如,在现有 chrome 中启用远程 Debug模式),但最好使用最少的操作来完成。
为了使用browser.connect ,我要给它browserWSEndpoint ,相当于 webSocketDebuggerUrl在“http://localhost:9222/json/version”下。
我的问题是,只有当我使用 --headless 运行 chrome 时,我才能访问“http://localhost:9222/json/version”标签,否则我无法得到这个字符串。
我尝试从 cmd 运行:chrome --disable-gpu --remote-debugging-port=9222 https://stackoverflow.com它在打开的 chrome 实例下打开一个新选项卡,但我仍然无法访问 'http://localhost:9222/json/version' 来获取 webSocketDebuggerUrl (我在尝试到达该地址时收到“ERR_CONNECTION_REFUSED”)。
我该怎么做?我在网上找不到任何东西。
编辑(也改进了问题的第一段):
谢谢大家的回答,但是看来我原本想做的事情是不可能的。如果不是现有 Chrome,则无法连接到 首次开通 (浏览器的第一个实例)带有标志 --remote-debugging-port=XXXX这使您可以远程控制它。
一旦打开浏览器的第一个实例 - 它就会锁定浏览器的用户数据,并且标志不能从命令行添加到浏览器(只能从浏览器内部,由用户)。

最佳答案

webSocketDebuggerUrl值属于每个单独的选项卡。
这个方法需要从你已经打开的实例中废弃,需要使用 --remote-debugging-port=9222 全新启动。 .

在启动 chrome 之前尝试运行它。
taskkill /F /IM chrome.exe
现在你想要的网址是 http://127.0.0.1:9222/json并且看起来像这样。
screenshotof :9222/json

如果这解决了它,很好,但我认为您真正想要做的是启动包含您的个人数据的 native chrome 并让该实例接受来自您脚本的命令。

幸运的是,这是一个简单得多的目标!

您可以通过传递 executablePath 和 userDataDir 来启动

from pyppeteer import launch
import asyncio

url = 'https://stackoverflow.com/questions/57957890/connect-with-pyppeteer-to-existing-chrome'

async def main():
    global browser
    browser = await launch(headless=False, executablePath='C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe', userDataDir="\\Local\\Google\\Chrome\\User Data")
    page = await browser.newPage()
    await page.goto(url)
    # await browser.close()

 run = asyncio.run(main())

这种方法的问题之一是,如果在创建一个现有 chrome 实例时有其他现有 chrome 实例正在运行,您将无法打开新页面。
我建议设置一个单独的 chrome 安装,您可以设置您想要的方式,而不是使用 pyppeteer 进行控制。
如果我发现此方法的其他错误,我会更新。

每当您以这种方式启动它时,都可以有一个脚本来更新 Chrome 中的用户数据

关于python - 使用 pyppeteer 连接到现有的 chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57957890/

相关文章:

python - 使用 Django 启用管理员时出现 404

windows - 批处理 : How to echo string containing '&' char to a file

javascript - 如何检测不触发 onpopstate 的 pushState/replaceState

javascript - WebGL 和 Chrome : high resolution makes for bad performance

python - 创建一个字典列表,其中每个字典都包含另一个字典作为值

python - python中有枚举器查找方法吗?

python - 非法指令 : 4 when importing tensorflow in python 3. 6

windows - 使用自定义协议(protocol)打开 URL - 语法错误?

c# - CS 脚本 - 如何像标准 Windows 可执行文件一样运行 '.cs' 文件?

jquery对chrome扩展弹出窗口的影响?