最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端使用Puppeteer設(shè)置Cookies并實(shí)現(xiàn)自動(dòng)化分頁(yè)操作的實(shí)戰(zhàn)教程

 更新時(shí)間:2026年01月14日 09:45:09   作者:weixin_46244623  
在現(xiàn)代的 Web 自動(dòng)化中,使用 Puppeteer 進(jìn)行瀏覽器自動(dòng)化是一個(gè)非常方便的選擇,本篇文章將介紹如何使用 Puppeteer 設(shè)置 Cookies,模擬用戶行為等操作,感興趣的小伙伴可以了解下

在現(xiàn)代的 Web 自動(dòng)化中,使用 Puppeteer 進(jìn)行瀏覽器自動(dòng)化是一個(gè)非常方便的選擇。本篇文章將介紹如何使用 Puppeteer 設(shè)置 Cookies、模擬用戶行為、獲取網(wǎng)頁(yè)內(nèi)容,并且遍歷分頁(yè)獲取所有數(shù)據(jù)。

一、項(xiàng)目初始化

首先,我們需要安裝 Puppeteer。你可以通過(guò) npm 來(lái)安裝:

npm install puppeteer

然后創(chuàng)建一個(gè) JavaScript 文件,例如 puppeteer.js,以若依測(cè)試。并添加以下代碼:

二、代碼實(shí)現(xiàn)

const puppeteer = require('puppeteer');
const fs = require('fs'); // 導(dǎo)入文件系統(tǒng)模塊

// 設(shè)置延時(shí)的工具函數(shù)
function waitForTimeout(time) {
    return new Promise((resolve, reject) => setTimeout(resolve, time));
}

(async () => {
  // 啟動(dòng) Puppeteer 瀏覽器實(shí)例
  const browser = await puppeteer.launch({
    headless: false // 設(shè)置為 false 以便查看操作
  });

  try {
    const page = await browser.newPage();
    await page.setViewport({ width: 1920, height: 800 });

    // 導(dǎo)航到需要設(shè)置 cookie 的頁(yè)面
    await page.goto('http://localhost:8093/admin');

    // 定義多個(gè) cookie 對(duì)象并存儲(chǔ)在數(shù)組中
    const cookies = [
      {
        "name":"Admin-Token",
        "value":"eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjYzYWNmZTVmLWUyNGItNDYwNi05ZjdhLTBkYmU5ZDBhZWJmZCJ9.RqZDMMiRTGUwVSLal9dx2mDyHwkY_vk4Vs2bMSegph7P0eTnKDknN5DOP3wRu18e2NVk5OdVSfJcLmC0N1HHHQ"
      }
      // 可以繼續(xù)添加更多 cookie 對(duì)象
    ];

    // 使用 page.setCookie 方法設(shè)置多個(gè) cookie
    await page.setCookie(...cookies);
    
    // 打印當(dāng)前頁(yè)面的 cookies
    const cookies1 = await page.cookies();
    console.log('當(dāng)前頁(yè)面的 cookies:', cookies1);

    // 導(dǎo)航到目標(biāo)頁(yè)面
    await page.goto('http://localhost:8093/category');

    // 使用 XPath 選擇帶有特定文本的按鈕
    const xpathSelectorC = '//span[text()="50條/頁(yè)"]';
    await page.waitForXPath(xpathSelectorC);

    // 獲取符合條件的元素并模擬點(diǎn)擊操作
    const [element] = await page.$x(xpathSelectorC);
    if (element) {
        await element.evaluate(element => element.click());
        console.log('已選擇 "50條/頁(yè)"');
    } else {
        console.log('未找到 "50條/頁(yè)"');
    }

    // 等待分頁(yè)元素加載完成
    await page.waitForSelector('ul.el-pager');

    // 獲取分頁(yè)的所有 <li> 元素
    const liElements = await page.$$('ul.el-pager li');
    const lastLiElement = liElements[liElements.length - 1];
    let lastLiText = 0;

    if (lastLiElement) {
        lastLiText = await page.evaluate(li => li.textContent, lastLiElement);
        console.log('最后一個(gè) <li> 元素的內(nèi)容:', lastLiText);
    } else {
        console.log('未找到 <li> 元素');
    }

    // 定義表格和分頁(yè)按鈕選擇器
    const tableSelector = 'table';
    const nextButtonSelector = 'button.btn-next';

    // 等待下一頁(yè)按鈕可見(jiàn)
    await page.waitForSelector(nextButtonSelector, { visible: true, timeout: 5000 });
    const totalPages = parseInt(lastLiText); // 獲取總頁(yè)數(shù)
    let currentPage = 1;
    let allTableHTML = ''; // 用于保存所有表格的 HTML 內(nèi)容

    // 遍歷所有分頁(yè)
    while (currentPage <= totalPages) {
      const buttonElement = await page.$(nextButtonSelector);
      const tableElements = await page.$$(tableSelector);

      if (buttonElement) {
        // 點(diǎn)擊“下一頁(yè)”按鈕
        await buttonElement.click();
        await waitForTimeout(3000); // 等待加載

        // 獲取當(dāng)前頁(yè)面的表格內(nèi)容并保存
        for (const tableElement of tableElements) {
          const tableHTML = await tableElement.evaluate(element => element.outerHTML);
          allTableHTML += tableHTML;
        }

        currentPage++; // 增加當(dāng)前頁(yè)數(shù)
      } else {
        console.log('未找到按鈕');
        break; // 如果按鈕不存在,退出循環(huán)
      }
    }

    console.log('已瀏覽到第 ' + totalPages + ' 頁(yè)');
    
    // 你可以將 allTableHTML 保存為文件或進(jìn)一步處理
    fs.writeFileSync('allTables.html', allTableHTML);

    // 完成后關(guān)閉瀏覽器
    await browser.close();

  } catch (e) {
    console.log("發(fā)生錯(cuò)誤:" + e);
  }
})();

三、代碼說(shuō)明

啟動(dòng)瀏覽器實(shí)例:使用 puppeteer.launch() 啟動(dòng)一個(gè)瀏覽器實(shí)例。headless: false 表示我們希望看到瀏覽器的操作界面,便于調(diào)試。

設(shè)置 Cookies:使用 page.setCookie(...cookies) 設(shè)置多個(gè) Cookie。我們通過(guò)傳遞一個(gè)包含多個(gè) cookie 對(duì)象的數(shù)組來(lái)設(shè)置 Cookies。

等待和選擇元素:使用 page.waitForXPath()page.waitForSelector() 來(lái)確保元素加載完成后進(jìn)行交互。特別是通過(guò) XPath 選擇“50條/頁(yè)”按鈕,并模擬點(diǎn)擊它。

分頁(yè)操作:使用 page.$(nextButtonSelector)page.$$(tableSelector) 獲取“下一頁(yè)”按鈕和表格元素,進(jìn)行分頁(yè)處理。每一頁(yè)的數(shù)據(jù)都通過(guò) tableElement.evaluate() 獲取 HTML 內(nèi)容,并累積到 allTableHTML 中。

文件保存:最后,所有頁(yè)面表格的 HTML 內(nèi)容保存在一個(gè)文件 allTables.html 中,使用 Node.js 的 fs 模塊來(lái)實(shí)現(xiàn)文件保存。

四、總結(jié)

通過(guò)以上代碼,你可以模擬在 Web 頁(yè)面上設(shè)置 Cookies、模擬用戶行為并自動(dòng)化分頁(yè)操作。你可以根據(jù)具體需求對(duì)該代碼進(jìn)行修改,以實(shí)現(xiàn)更復(fù)雜的自動(dòng)化任務(wù)。

Puppeteer 是一個(gè)強(qiáng)大的瀏覽器自動(dòng)化工具,適用于多種 Web 數(shù)據(jù)抓取和自動(dòng)化任務(wù)。

到此這篇關(guān)于前端使用Puppeteer設(shè)置Cookies并實(shí)現(xiàn)自動(dòng)化分頁(yè)操作的實(shí)戰(zhàn)教程的文章就介紹到這了,更多相關(guān)Puppeteer瀏覽器自動(dòng)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

汝阳县| 东港市| 昔阳县| 尉氏县| 咸宁市| 永吉县| 鄄城县| 娄底市| 大新县| 个旧市| 宝应县| 仙桃市| 渝北区| 清原| 南丹县| 白沙| 凌云县| 武威市| 葫芦岛市| 临澧县| 若羌县| 漾濞| 齐齐哈尔市| 乌恰县| 融水| 冷水江市| 嵊州市| 平泉县| 文昌市| 土默特右旗| 和田市| 灵寿县| 昌图县| 南雄市| 永泰县| 榆林市| 德州市| 广平县| 苍溪县| 九龙县| 隆尧县|