01-app.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const puppeteer = require('puppeteer');
  2. const fs = require("fs");
  3. (async () => {
  4. const browser = await puppeteer.launch({
  5. executablePath: './chromium/chrome.exe',
  6. headless: true, //默认为true(无头),不显示浏览器界面
  7. slowMo: 200, //减速显示,有时会作为模拟人操作特意减速
  8. devtools: true //显示开发者工具。页面宽高默认800*600,把开发者工具显示再隐藏页面会占满屏幕,有没有大佬解释下?
  9. });
  10. //生成Page对象
  11. //const page = await browser.newPage();//官网写法:一打开浏览器会打开两个tab,第二个才是你正在操作的tab
  12. const page = (await browser.pages())[0]; //这是我的写法,只有一个tab
  13. await page.goto('http://www.bidutuijian.com/books/weiweiyixiao/000.html'); //跳转到掘金
  14. //请开始你的表演...
  15. const result = await page.evaluate(() => {
  16. return new Promise(resolve => {
  17. // let $titles = document.querySelector('.cell-items').getElementsByTagName('li');
  18. let $titles = document.getElementsByTagName('td');
  19. let titles = [];
  20. let index = 0;
  21. const len = $titles.length;
  22. const interval = setInterval(() => {
  23. if (index === len) {
  24. resolve(titles);
  25. clearInterval(interval);
  26. return;
  27. }
  28. console.log($titles[index]);
  29. titles.push({
  30. href: `http://www.bidutuijian.com/books/weiweiyixiao/${$titles[index].getElementsByTagName('a')[0].getAttribute('href')}`,
  31. title: $titles[index].getElementsByTagName('a')[0].innerText,
  32. index: index + 1
  33. });
  34. index += 1;
  35. }, 30);
  36. });
  37. });
  38. await browser.close(); //关闭浏览器
  39. console.log('over');
  40. fs.writeFileSync('./xindaming.js', 'module.exports =' + JSON.stringify(result));
  41. })();