Noa*_*oam 7 python windows google-chrome pyppeteer
我想使用pyppeteer连接到现有的(已由用户打开,没有任何额外标志)Chrome 浏览器这样我就能够控制它。
我之前几乎可以完成所有手动操作(例如,在现有 chrome 中启用远程调试模式),但最好用最少的操作来完成。
为了使用browser.connect
,我需要给它browserWSEndpoint
,这相当于webSocketDebuggerUrl
在'http://localhost:9222/json/version'下。
我的问题是,只有当我运行 chrome 时,我才能访问“http://localhost:9222/json/version”--headless
,否则我无法获取该字符串。
我尝试从 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
允许您远程控制它的标志,则您无法连接到该 Chrome。一旦打开浏览器的第一个实例,它就会锁定浏览器的用户数据,并且无法从命令行将标志添加到浏览器(只能由用户从浏览器本身内部添加)。
小智 3
该webSocketDebuggerUrl
值属于每个单独的选项卡。
需要从已经打开的实例中删除此方法,该实例需要使用全新启动--remote-debugging-port=9222
。
尝试在启动 chrome 之前运行此命令。
taskkill /F /IM chrome.exe
现在你想要的 url 是 http://127.0.0.1:9222/json 并且看起来像这样。
截图:9222/json
如果这解决了问题,那就太好了,但我认为您真正想要做的是启动包含您的个人数据的本机 Chrome,并让该实例接受来自脚本的命令。
幸运的是,这是一个简单得多的目标!
您可以通过传递executablePath和userDataDir来启动来实现这一点
from pyppeteer import launch
import asyncio
url = '/sf/ask/4057052331/'
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())
Run Code Online (Sandbox Code Playgroud)
此方法的问题之一是,如果在创建页面时有其他现有 chrome 实例正在运行,您将无法打开新页面。
我建议设置一个单独的 chrome 安装,你可以按照你想要的方式设置它,而不是使用 pyppeteer 进行控制。
如果我用这种方法发现其他错误,我会更新。
每当您以这种方式启动 Chrome 时,都可以有一个脚本来更新 Chrome 的用户数据
归档时间: |
|
查看次数: |
8040 次 |
最近记录: |