Playwright在MacBook中连接已有Chrome浏览器遇空白页问题
解决Playwright启动Chrome持久化上下文后页面空白的问题
问题分析
你遇到的空白页(about:blank)问题,主要有几个常见原因:
- URL缺少协议头(http/https),浏览器无法解析正确的目标地址
- 指定的Chrome用户数据目录正在被其他Chrome实例占用,导致Playwright无法正常接管会话
- 权限或沙箱限制阻止页面加载
解决方案
1. 补全URL协议头
你的page.goto("amazon.co.uk/")没有指定协议,浏览器会将其当作相对路径处理,自然无法加载亚马逊页面。必须加上https://:
await page.goto("https://amazon.co.uk/");
2. 避免用户数据目录冲突
如果当前有Chrome浏览器正在运行,它会锁定用户数据目录,Playwright启动的持久化上下文无法正常使用该目录,进而导致页面加载异常。解决方法二选一:
- 关闭所有Chrome窗口后再运行测试代码
- 复制一份Chrome用户数据目录到新路径,使用复制后的目录启动上下文:
const userDataDir = "/Users/SinhAb/Library/Application Support/Google/Chrome/Copy/"; // 先手动复制原目录到Copy路径,再用这个路径启动
3. 添加必要的启动参数(可选)
如果是权限或沙箱问题导致的加载失败,可以在启动时添加参数:
const browserContext = await chromium.launchPersistentContext(userDataDir, { channel: "chrome", args: [ "--no-sandbox", "--disable-dev-shm-usage" ] });
修改后的完整代码
test("Open chrome with existing session", async ({}) => { // 建议使用复制后的用户数据目录,避免与正在运行的Chrome冲突 const userDataDir = "/Users/SinhAb/Library/Application Support/Google/Chrome/Copy/"; const browserContext = await chromium.launchPersistentContext(userDataDir, { channel: "chrome", args: ["--no-sandbox", "--disable-dev-shm-usage"] }); let page = browserContext.pages().at(0); if (!page) page = await browserContext.newPage(); // 补全https协议头 await page.goto("https://amazon.co.uk/"); await page.waitForTimeout(5000); });
内容的提问来源于stack exchange,提问作者Abhinaba Sinha
相关产品推荐
相关产品推荐

