当前位置: 首页 > 科技观察

一天一技能:十倍效率,Puppeteer是如何开启交互模式的?

时间:2023-03-12 12:21:11 科技观察

我们在使用Selenium开发爬虫的时候,在Jupyter中写代码比在PyCharm中更方便。如果用PyCharm写代码直接运行,当某行报错时,整个程序就会挂掉,改完代码还得从头开始,很浪费时间。但是如果我们使用Jupyter来写代码,那么我们只需要重试出错的那行代码,而不需要再次重启整个程序。但是如果我们使用JavaScript来操作Puppeteer,我们应该如何编写一行代码并运行一行代码呢?我们知道Node.js的命令行确实可以写一行代码运行一行,如下图所示:和上面的代码有点不一样。我们先看一下Puppeteer官方文档中代码是怎么写的:注意有一长段函数是用async声明的,这是一个异步函数。在Node.js的交互环境下,整个函数必须一次写完运行,而不是一段一段地写。如果你尝试一段一段地运行它,代码会报错。我们来看一下:这是因为在异步函数中必须使用await关键字。它不能单独出现在最外层。这就需要我们把所有的代码写成一个异步函数,然后运行这个异步函数。但是写一个.js文件和直接运行有什么区别呢?每次要测试一条XPath语句能否正常运行,都得把整个代码重新运行一遍。这不是浪费了交互环境的优势吗?但其实Node.js和Chrome本身就有一个非常好用的交互环境,只是很多人可能不知道而已。要启用这种交互模式,其实很简单。我们从头开始创造这个环境。首先,我们创建一个文件夹test_puppeteer,然后使用npm或yarn安装puppeteer-core。使用puppeteer-core而不是puppeteer,因为前者可以直接使用系统的Chrome,而后者需要下载一个几百MB的Chromium,比较浪费时间。mkdirtest_puppeteercdtest_puppeteeryarnaddpuppeteer-core上面的命令执行完后,我们就可以启动交互环境了。执行命令:node--inspect,运行效果如下图:现在,打开一个Chrome窗口,打开开发者工具,如下图:请注意,在开发者工具的左上角菜单栏,图中箭头所指的位置,出现了Node.js的绿色Logo。让我们点击它。此时会弹出一个单独的开发者工具窗口,如下图所示:这个窗口会自动关联到我们刚刚启动的Node.js。现在,我们尝试直接在这个开发者工具的Console标签页上写一些代码:可以看到Console标签页打印的内容也会出现在终端窗口中。看起来只是从黑窗口在白窗口写代码而已。有什么好炫耀的?现在,让我们看一下您计算机上的Node.js版本。如果小于14,那么就快速升级,让他大于等于14。然后执行我们刚才的命令,如下图。接下来,和之前一样的步骤,我们启动开发者工具,然后尝试直接调用Puppeteer,不可思议的一幕出现了:现在可以直接使用await了!现在,在这个控制台选项卡上,我们可以像在Jupyter中编写JavaScript代码一样,写一行,运行一行,查看效果,再写一行,运行另一行。让我们在这里尝试打开我的博客:如您所见,我故意写错了一部分代码。我应该用awaitbrowser.NewPage()但是我写了awaitbrowser.page,导致程序报错。但是这没关系。我可以在下面将其更改为正确的。整个过程不需要重启浏览器。你跑一行代码,它执行一行代码,代码错了,你只需要改一下这一行,重新执行。这称为交互式环境。本文转载自微信公众号“闻所未闻的密码”,可通过以下二维码关注。转载本文请联系Code公众号。