web-dev-qa-db-ja.com

Puppeteerにログインする方法は?

私はjavascriptと操り人形が初めてです。以下のログインコードを試してみましたが失敗しました。それに比べて、pages2を追加して成功しました。どうすれば解決できますか?前もって感謝します。

const CREDS = require('./creds');

async function main() {
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({headless: false});

const page = await browser.newPage();
await page.setViewport({width: 1200, height: 720})
await page.goto('https://www.daum.net');
await page.waitForNavigation();
await page.type('#id', CREDS.username);
await page.type('#loginPw', CREDS.password);
await page.click('#loginSubmit');

const page2 = await browser.newPage();
await page2.setViewport({width: 1200, height: 720})
await page2.goto('https://google.com');
await page2.type('#lst-ib', 'Headless Chrome');
}

main();
10
Joonho Lee

page.waitForNavigation();は、clickまたはページからトリガーされるナビゲーションアクションの後、ナビゲーションを待機します。おそらくpage.clickの後にwaitForNavigationを追加する必要があります。

await Promise.all([
      page.click('#loginSubmit'),
      page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);

両方の約束が解決するまで待機します。

したがって、初期コードは次のようになります。

const puppeteer = require('puppeteer');
async function main() {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.setViewport({width: 1200, height: 720})
await page.goto('https://www.daum.net', { waitUntil: 'networkidle0' }); // wait until page load
await page.type('#id', CREDS.username);
await page.type('#loginPw', CREDS.password);
// click and wait for navigation
await Promise.all([
          page.click('#loginSubmit'),
          page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
}

main();

注:余談ですが、daum.netのログインがないため、これをテストすることはできません。また、直面している実際のエラーを確認することもできません。上記のソリューションを試して結果を共有できる場合は、さらに役立つでしょう。

19
Md. Abu Taher