<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>w3cfed (Martin Ager Adams)</title>
    <link>http://beta.w2solo.com/w3cfed</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title> 只推荐一本 JavaScript 书，你推荐哪本？</title>
      <description>&lt;p&gt;&lt;img src="https://duckfiles.oss-cn-qingdao.aliyuncs.com/eleduck/image/f26ac2dd-f121-458c-b6e0-b1dab603f533.png" title="现代 JavaScript 教程" alt="现代 JavaScript 教程"&gt;&lt;/p&gt;

&lt;p&gt;嗨，我是 Martin。最近为了统一社区称谓，都换成 Martin Ager Adams。
前端老王就是 Martin 啦.&lt;/p&gt;
&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;前端世界，技术层数不穷。尽管更新速度已经放缓，刚入门的票友总还是鸭梨山大。&lt;/p&gt;

&lt;p&gt;前端三剑客 —— HTML、CSS、JavaScript 中面试问的最多的就是 JS。&lt;/p&gt;

&lt;p&gt;全网的资料浩如烟海，我们如何学习 JS 呢？别急，今天 Martin 给大家介绍一必看的网站。&lt;/p&gt;

&lt;p&gt;首先说一句，它不是 MDN，但是它的确和 MDN 一样重要。&lt;/p&gt;

&lt;p&gt;把&lt;strong&gt;它、MDN、红宝书&lt;/strong&gt;列为前端必看的资料。&lt;/p&gt;
&lt;h2 id="推荐"&gt;推荐&lt;/h2&gt;
&lt;p&gt;今天推荐的这个教程是《&lt;a href="https://javascript.info" rel="nofollow" target="_blank" title=""&gt;The Modern JavaScript Tutorial&lt;/a&gt;》。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202007/05/11426/SMKm852vwb.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;不用担心英语不好，因为有一群中文小伙伴在负责翻译。&lt;/p&gt;

&lt;p&gt;中文版地址《&lt;a href="https://javascript.info" rel="nofollow" target="_blank" title=""&gt;现代 JavaScript 教程&lt;/a&gt;》&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202007/05/11426/P99IENly7e.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="知乎"&gt;知乎&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.zhihu.com/question/27471131/answer/1298866495" rel="nofollow" target="_blank" title=""&gt;如果只能推荐一本 JavaScript 的书，你会推荐哪本？&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202007/05/11426/dge0yMFFHf.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这个教程解决了现存 JavaScript 书籍最大的痛点：&lt;strong&gt;实时性&lt;/strong&gt;。这是本教程的第一大特色。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;《现代 JavaScript 教程》以最新的 JavaScript 标准为基准，通过简单但足够详细的内容，为你讲解从基础到高阶的 JavaScript 相关知识。保证了内容能够与最新的 ECMAScript 保持同步。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第二大特色&lt;/strong&gt;是，为读者搭建了良好的学习路线，由浅入深，内容足够详细也足够全面。当然，这里的全面是指在 JavaScript 语言层面的，不包括 React，Vue 等框架的教学。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;这个教程主要分为三个部分：&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;入门：&lt;/strong&gt; 主要为 JavaScript 语言方面的内容，包括数据类型，循环，对象，闭包，Class，原型，继承，Promise，ES Module 等基础知识。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;提升：&lt;/strong&gt; 包括 BOM 和 BOM 的相关内容。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;进阶：&lt;/strong&gt; 包括网络请求，Web Components，正则，动画，浏览器缓存等相关内容。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;第三大特色是：每节内容后，都给出了高质量的课后习题和解析。通过做题可以帮你检验自己的学习效果，并巩固新学到的知识。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202007/05/11426/37Jx5ZpSFY.jpeg!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202007/05/11426/lOlRoKd1e5.jpeg!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="教程"&gt;教程&lt;/h2&gt;&lt;h3 id="第 1 部分 JavaScript 编程语言"&gt;第 1 部分 JavaScript 编程语言&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202007/05/11426/YoikgmQtwD.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="第 2 部分 浏览器：文档，事件，接口"&gt;第 2 部分 浏览器：文档，事件，接口&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202007/05/11426/qGYB2I7gGI.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="第 3 部分其他文章"&gt;第 3 部分其他文章&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202007/05/11426/w2tXAxGWzA.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.zhihu.com/question/27471131/answer/1298866495" rel="nofollow" target="_blank" title=""&gt;如果只能推荐一本 JavaScript 的书，你会推荐哪本？&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="关注"&gt;关注&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;欢迎小伙伴，在评论区写出你最新喜欢的一本 JavaScript 的书。&lt;/strong&gt;&lt;/p&gt;</description>
      <author>w3cfed</author>
      <pubDate>Sun, 05 Jul 2020 12:44:50 +0800</pubDate>
      <link>http://beta.w2solo.com/topics/468</link>
      <guid>http://beta.w2solo.com/topics/468</guid>
    </item>
    <item>
      <title>[目前不招人了，帖子作废] 深圳风变科技招聘前端开发</title>
      <description>&lt;p&gt;[目前不招人了，帖子作废] 深圳风变科技招聘前端开发&lt;/p&gt;</description>
      <author>w3cfed</author>
      <pubDate>Fri, 12 Jun 2020 16:52:25 +0800</pubDate>
      <link>http://beta.w2solo.com/topics/446</link>
      <guid>http://beta.w2solo.com/topics/446</guid>
    </item>
    <item>
      <title>分享一个神奇的网站。前端、设计、后端、产品都可以进来看一下</title>
      <description>&lt;h2 id="分享理由"&gt;分享理由&lt;/h2&gt;
&lt;p&gt;这些插画太美了，放到自己的网站，B 格一下子提升很多倍。&lt;/p&gt;
&lt;h2 id="网站地址"&gt;网站地址&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://undraw.co/illustrations" rel="nofollow" target="_blank" title=""&gt;https://undraw.co/illustrations&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="网站截图"&gt;网站截图&lt;/h2&gt;
&lt;p&gt;&lt;img src="/uploads/photo/2020/e92d3cba-eb90-4c7f-8ddb-cdb30920d0bf.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/9b47347a-fb30-4c15-9f04-05e2119d75a1.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/6610f47a-782f-4602-a05c-1e28a5fabdbd.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/20d7cb48-2cc4-44a0-acf2-a470527607d6.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/6ceefabb-39f8-40ca-a55e-ee5d7e26213e.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="版权信息"&gt;版权信息&lt;/h2&gt;
&lt;p&gt;可以免费使用啦。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/2020/f7db8b8b-d133-4ba0-ad2b-55cac1629e33.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>w3cfed</author>
      <pubDate>Tue, 26 May 2020 07:23:35 +0800</pubDate>
      <link>http://beta.w2solo.com/topics/426</link>
      <guid>http://beta.w2solo.com/topics/426</guid>
    </item>
    <item>
      <title>Puppeteer 爬取豆瓣小组公开信息</title>
      <description>&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/u7tJfsyv1A.png!large" title="Puppeteer 爬取豆瓣小组公开信息" alt="Puppeteer 爬取豆瓣小组公开信息"&gt;&lt;/p&gt;
&lt;h2 id="题外话"&gt;题外话&lt;/h2&gt;
&lt;p&gt;老王，最近取了笔名。不仅仅是笔名，字、号也统统安排。&lt;/p&gt;

&lt;p&gt;上官追风，字追风，号追风居士。&lt;/p&gt;

&lt;p&gt;非要给它一个解释的话，那就是「追风少年宅家里」。&lt;/p&gt;

&lt;p&gt;老王的行文路线其实就是他的思维路线路。&lt;/p&gt;
&lt;h2 id="Puppeteer"&gt;Puppeteer&lt;/h2&gt;
&lt;p&gt;面对未知的事物，最好的老师显然是搜索引擎，而搜索引擎中公认最好的又是 Google 搜索。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/hn0raym6m9.png!large" title="" alt="Google 搜索 Puppeteer"&gt;&lt;/p&gt;
&lt;h3 id="Puppeteer 文档"&gt;Puppeteer 文档&lt;/h3&gt;
&lt;p&gt;Github: &lt;a href="https://github.com/puppeteer/puppeteer" rel="nofollow" target="_blank"&gt;https://github.com/puppeteer/puppeteer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;英文文档：&lt;a href="https://pptr.dev" rel="nofollow" target="_blank"&gt;https://pptr.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;中文文档：&lt;a href="https://zhaoqize.github.io/puppeteer-api-zh_CN" rel="nofollow" target="_blank"&gt;https://zhaoqize.github.io/puppeteer-api-zh_CN&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="Puppeteer 简介"&gt;Puppeteer 简介&lt;/h3&gt;
&lt;p&gt;以下介绍摘录自中文文档。&lt;/p&gt;

&lt;p&gt;Puppeteer 读作 /puh·puh·teer/，是一个 Node 库，它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行，但是可以通过修改配置文件运行 “有头” 模式。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;生成页面 PDF。&lt;/li&gt;
&lt;li&gt;抓取 SPA「单页应用」并生成预渲染内容（即 SSR「服务器端渲染」）。&lt;/li&gt;
&lt;li&gt;自动提交表单，进行 UI 测试，键盘输入等。&lt;/li&gt;
&lt;li&gt;创建一个时时更新的自动化测试环境。使用最新的 JavaScript 和浏览器功能直接在最新版本的 Chrome 中执行测试。&lt;/li&gt;
&lt;li&gt;捕获网站的 &lt;a href="https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/reference" rel="nofollow" target="_blank" title="timeline trace"&gt;timeline trace&lt;/a&gt;，用来帮助分析性能问题。&lt;/li&gt;
&lt;li&gt;测试浏览器扩展。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="项目背景"&gt;项目背景&lt;/h2&gt;
&lt;p&gt;老王开始了电鸭社区「征稿」板块的事务，需要大量联系征稿人来电鸭社区发征稿贴。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/73xx5VF3u4.png!large" title="" alt="签到帖"&gt;&lt;/p&gt;

&lt;p&gt;偶然发现一个豆瓣小组有征稿人签到帖，那怎么办？手动复制粘贴是不可能的，马上动手写小爬虫。&lt;/p&gt;
&lt;h2 id="代码实战"&gt;代码实战&lt;/h2&gt;&lt;h3 id="第一步：创建项目"&gt;第一步：创建项目&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;创建一个目录&lt;code&gt;douban&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/Nyu2yLLAsq.png!large" title="" alt="创建项目"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;创建&lt;code&gt;douban.js&lt;/code&gt;文件&lt;/li&gt;
&lt;li&gt;粘贴官网的示例代码&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;puppeteer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://douban.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm&lt;/code&gt;安装&lt;code&gt;Puppeteer&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;别急，还不能运行代码呢。开启终端到项目根目录&lt;code&gt;npm&lt;/code&gt;安装&lt;code&gt;Puppeteer&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i puppeteer&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;需要等待&lt;code&gt;Chromium&lt;/code&gt;安装完，网络不好的小伙伴，自己想想办吧。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/z5LRrW8LFb.png!large" title="" alt="安装 Puppeteer"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;修改&lt;code&gt;package.json&lt;/code&gt;文件&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;douban&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;version&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.0.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scripts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;start&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node ./douban.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dependencies&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;puppeteer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^3.1.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="第二步：模拟登陆"&gt;第二步：模拟登陆&lt;/h3&gt;
&lt;p&gt;访问目标页面，发现需要登陆。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/irxkIjar5O.png!large" title="" alt="需要登陆"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;分析登陆页面结构&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;我选择了密码登录，降低复杂度。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/q5axsFIa09.png!large" title="" alt="登陆页面"&gt;&lt;/p&gt;

&lt;p&gt;我们需要干什么呢?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;打开页面&lt;/li&gt;
&lt;li&gt;点击密码登录&lt;/li&gt;
&lt;li&gt;输入账号&lt;/li&gt;
&lt;li&gt;输入密码&lt;/li&gt;
&lt;li&gt;点击登陆&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/aZEw0dHYuX.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;代码示例&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;puppeteer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;// 去豆瓣那个页面&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://accounts.douban.com/passport/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;networkidle2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;// 网络空闲说明已加载完毕&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// 点击搜索框拟人输入&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clickPhoneLogin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.account-tab-account&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;clickPhoneLogin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[id="username"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pwd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[id="password"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="c1"&gt;// 获取登录按钮元素&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loginElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div.account-form-field-submit &amp;gt; a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;loginElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitForNavigation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最终效果&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/4epFaCuTQW.gif!large" title="" alt="模拟登陆"&gt;&lt;/p&gt;
&lt;h3 id="第三步：爬取数据"&gt;第三步：爬取数据&lt;/h3&gt;
&lt;p&gt;有了前面的基础，后面我就不详细讲啦。&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;puppeteer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;// 去豆瓣登陆页面&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://accounts.douban.com/passport/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;networkidle2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;// 网络空闲说明已加载完毕&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// 点击搜索框拟人输入&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clickPhoneLogin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.account-tab-account&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;clickPhoneLogin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[id="username"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pwd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[id="password"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="c1"&gt;// 获取登录按钮元素&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loginElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div.account-form-field-submit &amp;gt; a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;// 点击按钮，开始登陆&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;loginElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitForNavigation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


    &lt;span class="c1"&gt;// 目标页面 url&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.douban.com/group/topic/112565224/?start=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="c1"&gt;// 翻页参数&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;// 定义爬取函数&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;networkidle2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;// 网络空闲说明已加载完毕&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$$eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div.reply-doc.content &amp;gt; p&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

            &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 拼接文本字符串&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n\n\n&lt;/span&gt;&lt;span class="s1"&gt;-----------------------------------------------------------&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 查看一下数据&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最终效果&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cdn.learnku.com/uploads/images/202005/21/11426/nKy0og4Mso.gif!large" title="" alt="爬取数据"&gt;&lt;/p&gt;
&lt;h3 id="第四步：写入数据"&gt;第四步：写入数据&lt;/h3&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;puppeteer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setViewport&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="c1"&gt;// 去豆瓣登陆页面&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://accounts.douban.com/passport/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;networkidle2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;// 网络空闲说明已加载完毕&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// 点击搜索框拟人输入&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clickPhoneLogin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.account-tab-account&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;clickPhoneLogin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[id="username"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pwd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[id="password"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="c1"&gt;// 获取登录按钮元素&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loginElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div.account-form-field-submit &amp;gt; a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;// 点击按钮，开始登陆&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;loginElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitForNavigation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


    &lt;span class="c1"&gt;// 目标页面 url&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.douban.com/group/topic/112565224/?start=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="c1"&gt;// 翻页参数&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;// 定义爬取函数&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;networkidle2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;// 网络空闲说明已加载完毕&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$$eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div.reply-doc.content &amp;gt; p&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

            &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


    &lt;span class="c1"&gt;// 拼接文本字符串&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n\n\n&lt;/span&gt;&lt;span class="s1"&gt;-----------------------------------------------------------&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 写入文件&lt;/span&gt;
    &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;douban.txt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;utf8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;写入成功&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="实战反思"&gt;实战反思&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;代码还需要优化，尤其是翻页写的很差。&lt;/li&gt;
&lt;li&gt;能不能分模块来实现。这段代码中，模拟登陆、爬取目标、写入文件都是揉在一起的。&lt;/li&gt;
&lt;li&gt;暂时就这些啦。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="完整代码"&gt;完整代码&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://gist.github.com/w3cfed/75217423f86cc9106976d5beffca745b" rel="nofollow" target="_blank"&gt;https://gist.github.com/w3cfed/75217423f86cc9106976d5beffca745b&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;puppeteer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;// 去豆瓣登陆页面&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://accounts.douban.com/passport/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;networkidle2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;// 网络空闲说明已加载完毕&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// 点击搜索框拟人输入&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clickPhoneLogin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.account-tab-account&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;clickPhoneLogin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[id="username"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pwd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[id="password"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="c1"&gt;// 获取登录按钮元素&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loginElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div.account-form-field-submit &amp;gt; a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;// 点击按钮，开始登陆&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;loginElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitForNavigation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


    &lt;span class="c1"&gt;// 目标页面 url&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.douban.com/group/topic/112565224/?start=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="c1"&gt;// 翻页参数&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;// 定义爬取函数&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;networkidle2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;// 网络空闲说明已加载完毕&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$$eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div.reply-doc.content &amp;gt; p&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

            &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


    &lt;span class="c1"&gt;// 拼接文本字符串&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n\n\n&lt;/span&gt;&lt;span class="s1"&gt;-----------------------------------------------------------&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 写入文件&lt;/span&gt;
    &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;douban.txt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;utf8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;写入成功&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>w3cfed</author>
      <pubDate>Mon, 25 May 2020 12:59:23 +0800</pubDate>
      <link>http://beta.w2solo.com/topics/424</link>
      <guid>http://beta.w2solo.com/topics/424</guid>
    </item>
    <item>
      <title>项目二 | 在线 Markdown 简历</title>
      <description>&lt;h2 id="名称"&gt;名称&lt;/h2&gt;
&lt;p&gt;1024 RESUME&lt;/p&gt;
&lt;h2 id="地址"&gt;地址&lt;a href="https://resume.1024.cool" rel="nofollow" target="_blank" title=""&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://resume.1024.cool" rel="nofollow" target="_blank" title=""&gt;https://resume.1024.cool&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="Github"&gt;Github&lt;a href="https://github.com/1024-cool/markdown-resume" rel="nofollow" target="_blank" title=""&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/1024-cool/markdown-resume" rel="nofollow" target="_blank" title=""&gt;https://github.com/1024-cool/markdown-resume&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;Jack Wang 要开始新的求职生涯哟。求职大概几件事情得做。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 简历&lt;/li&gt;
&lt;li&gt; 面试&lt;/li&gt;
&lt;li&gt; 合同&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;但是市面上符合程序员的求职简历模板真的太少了。我就没找到啊。&lt;/strong&gt; 功夫不负有心人。找到了一个哟。&lt;/p&gt;

&lt;p&gt;冷熊简历 &lt;a href="http://cv.ftqq.com" rel="nofollow" target="_blank" title=""&gt;http://cv.ftqq.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;前辈做的真不错。索性，我照抄一个项目。代码都是我写的，前辈是 React，我就搞一个 Vue。说干就干！&lt;/p&gt;
&lt;h2 id="预览"&gt;预览&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/353aa446-4f73-42ad-a473-211411829807.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="技术栈"&gt;技术栈&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;  Vue&lt;/li&gt;
&lt;li&gt;  Vue eventsBus&lt;/li&gt;
&lt;li&gt;  vue-editor&lt;/li&gt;
&lt;li&gt;  localStorage&lt;/li&gt;
&lt;li&gt;  Node&lt;/li&gt;
&lt;li&gt;  Express&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="剩余任务"&gt;剩余任务&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;    Markdown or HTML To PDF&lt;/li&gt;
&lt;li&gt;    PDF 下载&lt;/li&gt;
&lt;li&gt;    配色修改&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="欢迎大家 PR 哟。觉得不错的话，给一个 Star 吧。"&gt;欢迎大家 PR 哟。觉得不错的话，给一个 Star 吧。&lt;/h2&gt;</description>
      <author>w3cfed</author>
      <pubDate>Mon, 04 May 2020 05:44:51 +0800</pubDate>
      <link>http://beta.w2solo.com/topics/410</link>
      <guid>http://beta.w2solo.com/topics/410</guid>
    </item>
    <item>
      <title>项目一 | 远程工作信息收集站 yuancheng.works</title>
      <description>&lt;h2 id="小插曲"&gt;小插曲&lt;/h2&gt;
&lt;p&gt;开始很纠结，买了一个 yuancheng.works 域名会不会冒犯到 yuancheng.work 站长。&lt;/p&gt;

&lt;p&gt;还在群里咨询了 &lt;a href="/Phodal" class="user-mention" title="@Phodal"&gt;&lt;i&gt;@&lt;/i&gt;Phodal&lt;/a&gt; 等前辈。重新搞一个新域名，yuancheng.works 重定向到那个域名上。&lt;/p&gt;

&lt;p&gt;后来，我仔细想了一下。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;我仅仅是搜集&lt;a href="https://yuancheng.works/" rel="nofollow" target="_blank" title=""&gt;远程工作&lt;/a&gt;信息，不求啥利益，最多网站有流量了，挂点儿谷歌广告，养活自己的服务器。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;思考再三，我还是用了这个域名，目前穷，裸辞在家学习。&lt;/p&gt;
&lt;h2 id="远程.works 的初衷"&gt;
&lt;a href="https://yuancheng.works/" rel="nofollow" target="_blank" title=""&gt;远程.works&lt;/a&gt; 的初衷&lt;/h2&gt;
&lt;p&gt;给大家提供一个了解&lt;a href="https://yuancheng.works/" rel="nofollow" target="_blank" title=""&gt;远程工作&lt;/a&gt;的窗口。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://yuancheng.works/" rel="nofollow" target="_blank" title=""&gt;远程工作&lt;/a&gt;是一种选择，不是逃避，不是不想上班的接口，&lt;/p&gt;

&lt;p&gt;以下内容，摘录自&lt;a href="https://eleduck.com/" rel="nofollow" target="_blank" title=""&gt;电鸭社区&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://yuancheng.works/" rel="nofollow" target="_blank" title=""&gt;远程&lt;/a&gt;不是终极奥义，工作与生活，现实与理想的平衡才是。&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  不是所有企业，也并非所有个人都适合&lt;a href="https://yuancheng.works/" rel="nofollow" target="_blank" title=""&gt;远程工作&lt;/a&gt;。任何事物都有两面性，远程自然也不例外。关于远程的优劣，已经有太多人分享，我不在此赘述。&lt;/li&gt;
&lt;li&gt;  远程、兼职、外包、临时雇佣、斜杠青年、共享员工等高自由度的工作方式，都是对朝九晚五主流工作方式的一种良性补充，不可能完全替代，也没必要全盘替 代。&lt;/li&gt;
&lt;li&gt;  自由的本质并非随心所欲，而是可以自我选择。&lt;/li&gt;
&lt;li&gt; 「只工作，不上班」并非 “不工作，不上班”，别拿清闲当自由。&lt;/li&gt;
&lt;li&gt;  在抱怨备受压迫，苦不得志之前，想想自己为此付出过多少真正的努力？！&lt;/li&gt;
&lt;li&gt;  不是朝九晚五没意义，而是你把它过成了没意义。&lt;/li&gt;
&lt;li&gt;  为自己内心所要而工作，而不是为应付朝九晚五而上班。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id="远程.works"&gt;&lt;a href="https://yuancheng.works" rel="nofollow" target="_blank" title=""&gt;远程.works&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="计划任务"&gt;计划任务&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;增加信息源 (目前只有电鸭社区的信息)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;中文&lt;a href="https://yuancheng.works" rel="nofollow" target="_blank" title=""&gt;远程工作&lt;/a&gt;、英文&lt;a href="https://yuancheng.works" rel="nofollow" target="_blank" title=""&gt;远程工作&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://yuancheng.works" rel="nofollow" target="_blank" title=""&gt;远程工作&lt;/a&gt;公司列表&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;......&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="技术栈（用到的轮子）"&gt;技术栈（用到的轮子）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Egg&lt;/li&gt;
&lt;li&gt;axios&lt;/li&gt;
&lt;li&gt;cross-env&lt;/li&gt;
&lt;li&gt;egg-bin&lt;/li&gt;
&lt;li&gt;egg-cors&lt;/li&gt;
&lt;li&gt;egg-scripts&lt;/li&gt;
&lt;li&gt;egg-validate&lt;/li&gt;
&lt;li&gt;egg-view-vue-ssr&lt;/li&gt;
&lt;li&gt;cheerio&lt;/li&gt;
&lt;li&gt;sync-request&lt;/li&gt;
&lt;li&gt;moment&lt;/li&gt;
&lt;li&gt;vue&lt;/li&gt;
&lt;li&gt;vue-router&lt;/li&gt;
&lt;li&gt;vue-hot-reload-api&lt;/li&gt;
&lt;li&gt;vuex&lt;/li&gt;
&lt;li&gt;vuex-router-sync
如图 ：&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="//static.cnodejs.org/Fvqxj6pP7ESx-4IUoYytnMAHkVCo" title="www.yuancheng.works" alt="www.yuancheng.works"&gt;&lt;/p&gt;</description>
      <author>w3cfed</author>
      <pubDate>Fri, 17 Apr 2020 17:13:09 +0800</pubDate>
      <link>http://beta.w2solo.com/topics/400</link>
      <guid>http://beta.w2solo.com/topics/400</guid>
    </item>
    <item>
      <title>【电鸭社区发起】与子同袍！是时候该我们支援海外华人了</title>
      <description>&lt;p&gt;我是电鸭社区的共建者，老王。
原贴地址：&lt;a href="https://eleduck.com/posts/6XNfOL" rel="nofollow" target="_blank"&gt;https://eleduck.com/posts/6XNfOL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我是大灰，是一枚远程工作多年的老司机，是国内自由工作社区 - 电鸭社区的站长。&lt;/p&gt;

&lt;p&gt;有个大家都熟悉的段子：这场疫情国内打上半场，国外打下半场，海外华人打全场。社区里有个共建者&lt;a href="/Char" class="user-mention" title="@Char"&gt;&lt;i&gt;@&lt;/i&gt;Char&lt;/a&gt;，是加拿大的华人开发者。从他的嘴里我知道：&lt;/p&gt;

&lt;p&gt;"在国内疫情最严重的时候，很多海外华人发动身边资源几乎把本地市面上的口罩、护目镜和防护服全部买空，还要夜里一个一个电话打通国内物流通道，一路确保物资送到前线的医护人员手中。但是等轮到自己所在的国家和地区疫情日益严重的时候，却已经什么都买不到了"&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/c4d8d422-4df8-499c-8bcc-f0297bc7c888.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;▲知道我们要提供帮助，加拿大 - 曼省的华人谢谢刷屏。&lt;/p&gt;

&lt;p&gt;看得我既心酸又庆幸。庆幸为自己，面对同样的疫情灾难，我可以在自己国家的土地上，安心且自信的面对；心酸为他们，在异国土地上，在"CHINESE VIRUS"的有色眼镜甚至暴力威胁下，他们承受的，远比我们想象的要多。&lt;/p&gt;

&lt;p&gt;国内疫情爆发的时候，海外华人对国内的支援大家都看到了，能捐的大多给了我们，现在他们自己反而物资匮乏。是时候，该我们来支援他们了。&lt;/p&gt;

&lt;p&gt;需要帮助的人很多，我们只能先从我们能做的开始：&lt;/p&gt;

&lt;p&gt;海外求助信息搜集：社区里有一些熟识海外开发者，我们会委托他们作为海外支援者，收集他们当地需要支援的华人家庭的求助信息。发布在 github.com/eleduck/mas…
国内物/资募集邮寄：发动国内的朋友捐口罩和资金，成立志愿者团队，邮寄给海外华人。
OK，如上所说，如果你也想帮助海外华人，那么你可以：&lt;/p&gt;

&lt;p&gt;给我们捐口罩&lt;/p&gt;

&lt;p&gt;目前只需要正规的一次性外科医用口罩或者 N95 口罩
接收地址：广州市天河区黄埔大道西 122 号星辉中心 17 楼 黄金健 13002001175
为了方便跨国寄送，志愿者给我们提供的地址，我本人已核实，可放心邮寄：）
所有捐赠我们将一一记录，公开在社区，接受监督；
给我们捐款：&lt;/p&gt;

&lt;p&gt;这些捐款将被我们用来就近采买口罩、支付邮费；
为统计方便，暂只接受¥20 以上捐款；
所有款项将一一记录，公开在社区，接受监督；
收款微信：大灰个人微信，提现手续费等，我自行承担 &lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/2020f31c-41f0-4047-8fba-cbb96451031e.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;加入志愿者团队，我们目前需要：&lt;/p&gt;

&lt;p&gt;base 在海外的华人开发者，牵头收集当地华人的求助信息，push 到 Github 上;
推广组：完善并推广我们的行动，影响更多人，帮助更多人；
信息组：对接海外华人的求助信息，核实地址，明确需求；输出邮寄 list；
物资组：接收国内捐赠者的快递；按信息组的名单向国外邮寄物资；最好在北上广等方便发国际快递的地方；
帮助我们扩散这次行动：&lt;/p&gt;

&lt;p&gt;去 follow and star 我们在 github 上的项目 
&lt;a href="https://github.com/eleduck/maskhero" rel="nofollow" target="_blank"&gt;https://github.com/eleduck/maskhero&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;在朋友圈，或者其他群转发扩散你现在看到的这个链接。
行动时间线：（持续更新）&lt;/p&gt;

&lt;p&gt;3 月 21 日&lt;/p&gt;

&lt;p&gt;电鸭社区共建小组决定发起这次行动；
@ 大湿&lt;a href="/LPY" class="user-mention" title="@LPY"&gt;&lt;i&gt;@&lt;/i&gt;LPY&lt;/a&gt;开始在 Github 上搭建项目；
@ 大灰开始撰写行动方案；&lt;a href="/Char" class="user-mention" title="@Char"&gt;&lt;i&gt;@&lt;/i&gt;Char&lt;/a&gt;开始梳理海外求助信息提交流程；
3 月 22 日&lt;/p&gt;

&lt;p&gt;新增&lt;a href="/Jack" class="user-mention" title="@Jack"&gt;&lt;i&gt;@&lt;/i&gt;Jack&lt;/a&gt;@Kevin 两位志愿者；
&lt;a href="/Jack" class="user-mention" title="@Jack"&gt;&lt;i&gt;@&lt;/i&gt;Jack&lt;/a&gt;开始搜集国内的扩散 list；
3 月 23 日&lt;/p&gt;

&lt;p&gt;比利时华人开发者&lt;a href="/HelloWorld" class="user-mention" title="@HelloWorld"&gt;&lt;i&gt;@&lt;/i&gt;HelloWorld&lt;/a&gt;加入志愿小组，开始收集当地华人求助信息；&lt;/p&gt;

&lt;p&gt;&lt;a href="/Char" class="user-mention" title="@Char"&gt;&lt;i&gt;@&lt;/i&gt;Char&lt;/a&gt; 开始在当地华人群扩散我们能提供的帮助&lt;/p&gt;

&lt;p&gt;中午 12 点（加拿大 - 温尼伯当地时间 12 点），我们开始收到海外华人的求助信息： &lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/5185110b-d286-4935-8144-ec7527f58818.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/4824508f-fed8-48a7-9d37-7ca5edc96933.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;1 点左右：当地华人也开始集资捐赠，响应我们的行动&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/f2455c09-342d-4655-9fcb-171168ba5929.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;一位温哥华的华人联系到我们，捐赠 1000 个口罩给我们&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/c1c06e60-0296-4f61-b053-25623580ff93.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;也有朋友找来，做志愿快递员，666！ &lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.way2solo.com/uploads/photo/2020/4305ac33-28a5-4019-b246-b9c418dadb9e.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;备注：我们的 Github,两位开发志愿还没完全做好，比较简陋，有熟悉 PYTHON 的同学可以来联系 &lt;a href="/greatghoul" class="user-mention" title="@greatghoul"&gt;&lt;i&gt;@&lt;/i&gt;greatghoul&lt;/a&gt; 参与贡献。&lt;/p&gt;</description>
      <author>w3cfed</author>
      <pubDate>Mon, 23 Mar 2020 19:01:30 +0800</pubDate>
      <link>http://beta.w2solo.com/topics/383</link>
      <guid>http://beta.w2solo.com/topics/383</guid>
    </item>
  </channel>
</rss>
