comTg / Blog

blog
0 stars 0 forks source link

puppeteer使用 #15

Open comTg opened 2 years ago

comTg commented 2 years ago

安装

npm i puppeteer puppeteer-core

注意 .npmrc中配置PUPPETEER_SKIP_DOWNLOAD=true可跳过chromium的安装

使用

// 如何获取元素x y 坐标值 let element = await page.$("");

let box = await element.boundingBox();

elementHandle.boundingBox() returns: <Promise<?Object>> x 元素的 x 坐标(以像素为单位)。 y 元素的 y 坐标(以像素为单位)。 width 元素的像素宽度。 height 元素的像素高度。 //

comTg commented 2 years ago

保存为pdf或截图

 // 保存pdf
  await page.pdf({
    path: "puppeteer.pdf",
    format: "a2",
  });

// 截图
await page.screenshot({
    path: 'test.png'
  });
comTg commented 2 years ago

在浏览器的上下文中执行JS代码

const dimensions = await page.evaluate(() => {
    return {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight,
      deviceScaleFactor: window.devicePixelRatio,
    };
  });
comTg commented 2 years ago

从页面中获取爬取结果

  const links = await page.evaluate((resultsSelector) => {
    const anchors = Array.from(document.querySelectorAll(resultsSelector));
    return anchors.map((anchor) => {
      const title = anchor.textContent.split("|")[0].trim();
      return `${title} - ${anchor.href}`;
    });
  }, resultsSelector);
comTg commented 2 years ago

填充表单并提交

await page.type(".devsite-search-field", "Headless Chrome"); // 输入框中填入内容
 // 按Enter键
 await page.keyboard.press("Enter");
 // 等待结果返回
  const resultsSelector = ".gsc-result .gs-title";
  await page.waitForSelector(resultsSelector);