添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
帅气的青蛙  ·  WebView 遠端偵錯  |  ...·  1 月前    · 
闷骚的酱肘子  ·  关于作者 | GA小站·  1 月前    · 
很酷的橡皮擦  ·  从Android到React ...·  2 年前    · 
玩手机的饭卡  ·  python - Networkx - ...·  2 年前    · 
耍酷的茶叶  ·  python - Warning ...·  2 年前    · 

用pyppeteer连接到现有的chrome上

7 人关注

我想连接到一个现有的(已经被用户打开,没有任何额外标志)Chrome浏览器,使用 pyppeteer 所以我将能够控制它。

我可以在之前做几乎所有的手动操作(例如,在现有的chrome中启用远程调试模式),但最好是用最少的操作来完成它。

为了使用 browser.connect ,我需要赋予它 browserWSEndpoint ,这相当于'http://localhost:9222/json/version'下的 webSocketDebuggerUrl

我的问题是,只有当我用 --headless 标签运行chrome时,我才能进入'http://localhost:9222/json/version',否则我无法得到这个字符串。

我试着从cmd运行。 【替换代码4 它在打开的chrome实例下打开了一个新的标签,但我仍然无法到达'http://localhost:9222/json/version'以获得 webSocketDebuggerUrl (当我试图到达该地址时,我得到'ERR_CONNECTION_REFUSED')。

我怎样才能做到这一点?我在网上找不到任何东西。

Edit (also refined the first paragraph of the question):

谢谢大家的回答,但似乎我最初想做的事情是不可能的。你不能连接到一个现有的Chrome浏览器,如果它不是 first opened (浏览器的第一个实例)的标志 --remote-debugging-port=XXXX ,允许你远程控制它。 一旦浏览器的第一个实例被打开--它就锁定了浏览器的用户数据,并且不能从命令行向浏览器添加标志(只能从浏览器内部,由用户添加)。

python
windows
google-chrome
pyppeteer
Noam
Noam
发布于 2019-09-16
3 个回答
John Edens
John Edens
发布于 2020-12-06
已采纳
0 人赞同

替换代码0】的值属于每个单独的标签。
这个方法需要从你已经打开的实例中删除,需要用 --remote-debugging-port=9222 完全重新启动。

尝试在启动chrome之前运行这个。

taskkill /F /IM chrome.exe

现在你想要的网址是http://127.0.0.1:9222/json,看起来会是这样的。
screenshotof :9222/json

如果这能解决这个问题,很好,但我认为你实际上想做的是启动包含你个人数据的本地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安装,你可以按照你的要求进行设置,然后用pyppeteer进行控制。
如果我发现这个方法有其他错误,我会更新。

可以用一个脚本来更新Chrome浏览器的用户数据,只要你以这种方式启动它。

Noam
替换代码0- 这是我的问题。这就是为什么我试图连接到一个现有的Chrome实例。我想这是不可能的。
这并非不可能,但这是一个相当高的问题。你是否尝试过从puppeteer的主nodejs版本中做这个?我将研究这个问题,并尽快回复。
我已经取得了一点进展,过一两天我再发帖。
how is going on
CS QGB
CS QGB
发布于 2020-12-06
0 人赞同

Connect with pyppeteer to existing chrome

b=await pyppeteer.connect(browserURL='http://127.0.0.1:9222')
pages = await b.pages()
page=pages[-1]
print(await page.evaluate(""" navigator.webdriver  """) )
    
Sinan Çetinkaya
Sinan Çetinkaya
发布于 2020-12-06
0 人赞同

我不知道为什么它对你不起作用,但我可以连接到现有的Chrome实例,即使我用 chrome --headless --remote-debugging-port=9222 --disable-gpu 命令启动它。

import asyncio
import aiohttp
import pyppeteer
loop = asyncio.get_event_loop()
async def main():
    async with aiohttp.ClientSession() as session:
            async with session.get("http://localhost:9222/json/version") as response:
                chrome = await response.json()
                browser = await pyppeteer.launcher.connect(
                    loop=loop,
                    browserWSEndpoint=chrome['webSocketDebuggerUrl']
        except aiohttp.ClientConnectorError:
            print("start chrome --headless --remote-debugging-port=9222 --disable-gpu")
            return
    [page, *_] = await browser.pages()
    await page.goto('https://stackoverflow.com')