01-app.js 2.1 KB

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