目標
模擬登陸51cto
主要學習以下知識點
方法名稱 | 方法說明 |
---|---|
page.$x | 此方法解析指定的XPath表達式。 |
page.waitForNavigation | 此方法找到一個匹配 selector 選擇器的元素,如果需要會把此元素滾動到可視,然後通過 page.mouse 點擊它。 如果選擇器沒有匹配任何元素,此方法將會報錯。 |
詳細api 可參考
https://blog.csdn.net/mengxiangxingdong/article/details/99237204
開始
本文章代碼均在 上傳在
https://gitee.com/hugo110/puppeteer-demo
效果圖
1.代碼
/*
模擬登陸 51 cto
https://home.51cto.com/index
*/
const puppeteer = require('puppeteer'); //引入puppeteer庫
const xpathUtil = require('./util/XpathUtil');
(async () => {
const browser = await puppeteer.launch({ //啓動瀏覽器
headless: false, //代碼運行時打開瀏覽器方便觀察
// devtools:true //打開f12界面
});
const page = await browser.newPage(); //打開瀏覽器的一個tab 頁
//networkidle2 - 只有2個網絡連接時觸發(至少500毫秒後)
await page.goto('https://home.51cto.com/index', {timedout: 10 * 1000, waitUntil: 'networkidle2'}); //訪問51cto 登陸頁面
//等待 賬號密碼登陸元素出現 並且點擊
await page.waitForXPath('//a[contains(string(),"賬號密碼登錄")]', {timedout: 10 * 1000});
await xpathUtil.$xClick(page, '//a[contains(string(),"賬號密碼登錄")]');
//等待賬號密碼顯示
await page.waitForSelector('#loginform-username', {timedout: 10 * 1000});
//輸入賬號密碼
await page.type('#loginform-username', "你的賬號")
await page.type('#loginform-password', "你的密碼")
//點擊登錄
await page.click('.loginbtn');
//等待網頁跳轉 networkidle0 不在有網絡響應
const response = await page.waitForNavigation({timedout: 10 * 1000, waitUntil: 'networkidle0'});
//輸出響應的頁面
console.log(await response.text())
// await browser.close(); //關閉瀏覽器
})();
參考博客
https://zhaoqize.github.io/puppeteer-api-zh_CN/#?product=Puppeteer&version=v1.19.0&show=api-pageevalselector-pagefunction-args-1