01-app.js 2.2 KB

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