博客 / 詳情

返回

無頭瀏覽器初體驗-事件點擊

以下功能基於puppeteer實現
中文文檔
英文文檔

  1. 引入插件,並且打開啓動
const puppeteer = require('puppeteer');

(async () => {
    browser = await puppeteer.launch({
       headless: true,
       // defaultViewport: { width: 1920, height: 1080 }, 
       // args: ['--start-maximized'], 
     });
     const page = await browser.newPage();
     await page.goto('http://localhost:9527/index'); // 要爬取的網頁URL  
     const data = await page.evaluate(() => {
        // 在瀏覽器環境中執行的代碼,可以訪問DOM並獲取數據  
        // 返回需要的數據  
        return document.body.innerHTML;
   });

  //關閉瀏覽器
  // await browser.close();

})();
  1. 獲取元素(方案一:)
//直接點擊
await page.waitForSelector('#box');
await page.click('#box');
  1. 通過鼠標事件(方案二)
  //通過鼠標移動點擊
let x = Math.floor(Math.random()*100+1)
await page.mouse.click(x, 100);

tips: 這種方法的前提是要知道,元素的位置,可通過以下方法獲取元素位置:

  // 獲取元素屬性,位置,尺寸
let obj1 = await dom.boxModel()
let obj2 = await dom.boundingBox()
let offsetTop = await page.$eval('#box', el => el.offsetTop); //這裏面可以使用js原生的一些方法獲取元素尺寸,位置

4.完整代碼片段:

const puppeteer = require('puppeteer');

(async () => {
  browser = await puppeteer.launch({
    headless: true,
    // defaultViewport: { width: 1920, height: 1080 },  //頁面默認尺寸
    // args: ['--start-maximized'],  //瀏覽器窗口最大化
  });
  const page = await browser.newPage();
  await page.goto('http://localhost:9527/index'); // 要爬取的網頁URL  
  const data = await page.evaluate(() => {
    // 在瀏覽器環境中執行的代碼,可以訪問DOM並獲取數據  
    // 返回需要的數據  
    return document.body.innerHTML;
  });

  //直接點擊
  await page.waitForSelector('#box');
  await page.click('#box');

  let dom = await page.$('#box')
  await dom.click()

  // 獲取元素屬性,位置,尺寸
  // let obj = await dom.boxModel()
  // let obj = await dom.boundingBox()

  //通過鼠標移動點擊
  // let x = Math.floor(Math.random()*100+1)
  // console.log(x)
  // await page.mouse.click(x, 100);

  //關閉瀏覽器
  await browser.close();

})();
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.