回首憶惘然
2021-11-18 20:27:49
我正在嘗試在 puppeteer 上運(yùn)行我的第一個(gè)代碼??軒?v1.20.0節(jié)點(diǎn)v8.11.3NPM V5.6.0這是一個(gè)基本示例,但它不起作用:const puppeteer = require('puppeteer');puppeteer.launch({headless: false}).then(async browser => { const page = await browser.newPage(); await page.goto('https://www.linkedin.com/learning/login', { waitUntil: 'networkidle0' }); console.log(0); await page.waitFor('#username'); console.log(1); await browser.close();});當(dāng)我運(yùn)行腳本時(shí),chrome 啟動(dòng),我可以看到帶有表單和 #username 表單字段的 Linkedin 登錄頁面,但 puppeteer 找不到該字段。它顯示0但從不顯示1,然后運(yùn)行TimeoutError: waiting for selector "#username" failed: timeout 30000ms exceeded.增加超時(shí)不會(huì)改變?nèi)魏螙|西,如果我檢查鉻中的控制臺(tái),該字段就在那里。Linkedin 登錄頁面用作 SPA,我不知道我在這里使用的方法是否正確。先感謝您。
1 回答

幕布斯7119047
TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
用戶名輸入在 iframe 內(nèi),您不能像這樣訪問它,您需要先訪問 iframe
await page.goto('https://www.linkedin.com/learning/login');
await page.waitForSelector('.authentication-iframe');
var frames = await page.frames();
var myframe = frames.find(
f =>
f.url().indexOf("uas/login") > 0);
let username = '123456@gmail.com';
const usernamefild = await myframe.$("#username");
await usernamefild.type(username, {delay: 10});
添加回答
舉報(bào)
0/150
提交
取消