首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Node:使用Puppeteer完成一次复杂的爬虫

启动一个浏览器环境 const browser = await puppeteer.launch() log(chalk.green('服务正常启动')) // 使用 try catch 捕获异步错误进行统一的错误处理...因为Typescript就是好用啊,也背不住Puppeteer的全部API,也不想每一个都查,所以使用TS就能智能提醒了,也能避免因为拼写导致的低级错误。...的页面是一个个爬的,如果想更快的爬取可以启动多个进程,注意,V8是单线程的,所以一个进程内部打开多个页面是没有意义的,需要配置不同的参数打开不同的node进程,当然也可以通过node的cluster...(集群)实现,本质都是一样的 爬取的过程也设置了不同的等待时间,一方面是为了等待网页的加载,一方面避免淘宝识别到我是爬虫弹验证码 Puppeteer的其它功能 这里仅仅利用了Puppeteer...分析DOM收集数据时,也多次利用了原生的方法获取DOM属性(如果网站有jquery也可以直接用,没有的话需要外部注入,typescript下需要进行一些配置,避免报错未识别的$变量,这样就可以通过jquery

3.3K90

干货 | 基于 BDD 理念的 UI 自动化测试携程度假的应用

W 模型,每一份项目文档(PRD),都对应着一份测试文档(测试用例)。 那么我们再来看看 BDD 流程是怎么样的: ?...为什么呢?细心的朋友已经发现了,模拟用户的第一步,打开浏览器竟然没有,并且操作也不是浏览器里点点点的。...其中步骤定义的基础代码是 JavaScript,而自动化库使用 Puppeteer Node 库。 想要运行这个 BDD 测试用例,则需要用到 Cucumber-CLI 提供的一些命令。...,只需要组合,使用者不需要关心具体实现 现在我们来回看下面这张图: 1)我们 Cucumber Hooks 定义了相关钩子函数,把打开浏览器等每个测试用例需要做的通用工作给做了; 2) Cucumber...因此这二者可以更好的结合,并且更加方便在浏览器调试。 更简单的拦截网络请求(可以更加方便的 Mock 接口等) 5.2 可不可以使用 Selenium ? 当然可以!

2.4K21
您找到你想要的搜索结果了吗?
是的
没有找到

用Node.js把HTML转成PDF格式

他们的问题是,如果想使用这些库,将不得不重新调整页面结构。这肯定会损害可维护性,因为需要将所有后续更改应用到 PDF 模板和 React 页面。 请看下面的代码。...其文档写道: Puppeteer 是一个 Node 库,它提供了一个高级 API 来控制 DevTools 协议上的 Chrome 或 Chromium。...如果未提供路径,则 PDF 将不会被保存到磁盘,而是会得到缓冲区。(稍后将讨论如何处理它。)... Docker 中使用 Puppeteer 认为这是实施中最棘手的部分 —— 所以让帮你节省几个小时的百度时间。...没有 NPM 模块,只有纯 CSS。但是跨浏览器兼容性方面,它的表现如何呢? 选择 CSS 打印规则时,你必须在每个浏览器测试结果,以确保它提供的布局是相同的,并且它不是100%能做到这一点。

6.2K30

搭建以 serverless 为后台服务的疫情热搜快应用

puppeteer为什么选择这个库呢?首先当然是为了爬取数据,那么有的小朋友就要说了,爬取数据还有其他的库呀?为什么非要用他呢?...,这个页面长这个样子: [baidu-virus-hot-search] 想要的数据就是这个页面热搜榜单了, Chrome 打开,用 devtools 查看页面的结构: [baidu-virus-hot-search-element...scf native invoke --no-event // 本地测试函数运行 发现控制台输出了错误: [scf-native-error] 看来是执行超时了,需要调整一下函数的相关配置,这个配置...里面的配置的 nodejs 运行版本是 8.9,这个会导致 puppeteer 跑不起来,需要很多额外的配置,具体可以参考这个文章 SCF 运行 Puppeteer,但是这个配置实在是太蛋疼了,且不说各种安装依赖...所以我查了 puppeteer文档puppeteer node10 以上版本,可以不需要安装这些依赖,所以决定修改 node 运行环境来解决,但是发现腾讯的 SCF 和 vscode 插件都不支持

1.1K10

使用Node.js爬取任意网页资源并输出高质量PDF文件到本地~

:附带文档和源码,别忘了给个star哦 本需求使用到的技术:Node.js和puppeteer puppeteer 官网地址: puppeteer地址 Node.js官网地址:链接描述 Puppeteer...上面只爬取了京东首页的图片内容,假设的需求进一步扩大,需要爬取京东首页 的所有 标签对应的跳转网页的所有 title的文字内容,最后放到一个数组。...第二步,在下载安装完了Node.js后, 启动windows命令行工具(windows下启动系统搜索功能,输入cmd,回车,就出来了) 第三步 需要查看环境变量是否已经自动配置,命令行工具输入 node...url地址栏输入cmd就可以打开了),输入 npm i cnpm nodemon -g 第六步 下载puppeteer爬虫包,完成第五步后,使用cnpm i puppeteer --save 命令...即可下载 第七步 完成第六步下载后,打开本项目的url.js,将您需要爬虫爬取的网页地址替换上去(默认是http://nodejs.cn/) 第八步 命令行输入 nodemon index.js

3.1K60

puppeteer爬虫教程_python爬虫入门最好书籍

大家好,又见面了,是你们的朋友全栈君。 译者按: 本文通过简单的例子介绍如何使用Puppeteer来爬取网页数据,特别是用谷歌开发者工具获取元素选择器值得学习。...npm install –save puppeteer 例1:截屏 当你把Puppeteer安装好了以后,我们来尝试第一个简单的例子。这个例子来自于Puppeteer文档(稍微改动)。...如果async最终顺利返回值,Promise则可以顺利reslove,得到结果;否则将会reject一个错误。...第5行: 我们浏览器创建一个新的页面,通过使用await关键字来等待页面成功创建 const page = await browser.newPage(); 第6行: await page.goto...查看Puppeteer API,可以找到定义点击的函数: page.click(selector[, options]) selector 一个选择器来指定要点击的元素。

1.8K20

实践指南-网页生成PDF

浏览器手动执行的大多数操作都可以使用 Puppeteer 完成,比如: 生成页面的屏幕截图和 PDF; 爬取 SPA 并生成预渲染的内容(即 SSR); 自动进行表单提交,UI 测试,键盘输入等;...puppeteer 时,会下载与 API 一起使用的最新版本的 Chromium 浏览器,有以下方法可以修改默认设置,不下载浏览器: 环境变量[2]设置 PUPPETEER_SKIP_CHROMIUM_DOWNLOAD...,没有可连接的浏览器,因此选择安装的是 puppeteer。...也有自带的 api 实现 cookie 注入,如 page.setCookie({name: name, value: value}),但是用这个方式注入没能获取到登录态,没有找到具体原因,建议还是直接用上面这个方法来注入...没有修改 Dockerfile 时,部署后发现了如下错误: ? 官网有给 Docker 配置说明[4]可以参考,最终实践可用的 ubuntu 系统的 Dockerfile 如下: # ...省略...

2.4K41

使用 Puppeteer 实现文件下载

目前比较火的是无头浏览器是 Google 的 Puppeteer,常用于自动化 UI 测试和截图。Puppeteer文档非常详细,可以参考 Puppeteer API。...所以需要一个能够运行 Puppeteer 的 Docker 镜像,虽然官方文档里面提供了 Docker 里面运行的一些配置,但当初踩了很多坑。...如果文件的任何内容发生了更改,则缓存将失效。 对于其他指令来说,只会简单比较一下指令有没有发生变化。 简单来说,我们可以利用 COPY 命令的缓存特性来实现跳过 npm install 命令。...错误处理 由于 Puppeteer 本身也不是特别稳定,如何进行错误捕获呢?怎么通知到开发下载失败了呢? 任何一步都可能出错,有可能点某个 DOM 点不到,有可能文件没下载下来,这些都要通知到开发。...利用 Puppeteer 提供的截图功能,报错的时候截一张图,把图片一起贴到告警邮件里面。这样收到告警邮件后,一打开就知道问题出在了哪一步,再也不需要很辛苦的去看日志了。

2.4K10

使用 Node.js 生成方便传播的图片

像上图中用红色线框圈出的部分,不太希望图片生成的过程也被“记录”下来。...如果是浏览器,可以页面执行 JavaScript 代码来删除这些元素,解决问题,比如: const selector = "#J_footer-container,.page-navigation-container...将长图分割避免图片生成错误 但是如果你想生成图片的文章特别长,会得到下面的结果:一张没有生成完毕的图片。 ?...最后 如果你阅读过的其他文章,会发现一直尝试使用简短代码和简单方案去解决我们日常遇到的许多看似复杂的需求。...如果你看到了这里,希望你在做事的过程,可以多想想有没有什么更简单的方式解决你当前手头的问题,而不是一味追求“同构、高大上的方案”。 共勉。 —EOF

1.4K21

RSS Can:使用 Golang Rod 解析浏览器动态渲染的内容:(四)

如果你接触过 “CDP” 相关的项目,你或许会好奇,为什么会选择 “Rod” 这个项目作为组件之一。...聊聊 CDP 相关的项目 提起能够调用浏览器进行自动化操作的 CDP 项目,最出名的三个项目都是 JavaScript 生态的,分别是:puppeteer/puppeteer[6](81k stars...虽然 chromedp 项目的示例更完备,但是代码书写的友好度其实没有 rod 好,其次组件灵活组合的能力 rod 也更好一些,最后,关于项目质量(可靠性)也有一些疑问,这一点和 rod 文档里提出的有一部分...我们添加了一个“元素检查”的功能,确保程序能够合适的时机再去执行必须的代码。...为什么说最新剧场版口碑回归? 谁能告诉,白菜到!底!是!什!么!

1.5K10

聊聊NPM镜像那些险象环生的坑

当然,这只是解决了大部分的安装过慢或安装失败的情况,随着项目的深入开发,肯定还会遇上一些比较奇葩的情况,这也是笔者为什么要写本文的原因。...然而办法总比困难多,从node-sass的官方文档可找到一个叫sass_binary_site的参数,它可设置Sass镜像地址,毫无疑问还是将其指向国内的淘宝镜像。...根据npm i node-sass的输出信息来分析,可得到下面的过程。...全局缓存的binding.node版本与Node版本不兼容 假如本地使用nvm或n进行Node版本管理,并且已切换了Node版本,安装过程可能会出现Windows/OS X/Linux 64-bit...根据错误提示,清理NPM缓存且重新安装即可,解决办法如下。

4.9K51

使用预渲染提升SPA应用体验

在生命周期里调用自定义事件 // main.js import Vue from 'vue' import App from './App.vue' import router from '....运行打包脚本 yarn run build 没有使用预渲染打包得到的dist文件夹目录: ? 使用预渲染后打包得到的dist文件夹目录: ?...没有使用预渲染得到根目录html文件: ? 使用预渲染得到根目录html文件: ? 部署后预渲染和非预渲染的差别 把它们都部署到gh-pages上,我们来看一下差别。...录了两个GIF点击刷新体验下差别,提前调试工具钩上Disable cache,每次刷新都不会使用缓存,重新向服务器发起请求。没有使用预渲染: ? 使用预渲染: ?...可以点击下面链接亲自体验一下,Demo地址: 没有预渲染Demo 预渲染Demo 不足 预渲染的只是快照页面,不适合频繁变动的页面 设置路由越多,构建时间越长 这是使用时感觉比较遗憾的地方,并不一定全面

2.8K40

自动化测试 puppeteer环境搭建

▷2◁ winodws系统下安装 首先要安装nodejs和npm 安装nodejs,https://nodejs.org/en/download/current/,nodejs官网下载最新版本...运行node example.js 会在D:根目录生成一个example.png的图片,图片内容为: ide上运行,这里选择的是webstrom(对jerbrains全家桶有偏爱...运行结果: 提示找不到chromium,debug一下,添加browserFetcher和revisionInfo到watcher 得到puppeteer默认加载chromium的路径是...puppeteer时默认下载chromium的路径不相符,所以提示找不到 解决方案:查看官网文档,我们的目标是找到修改chromium启动path的方法 制定path后运行: 运行成功...: 关于headless模式,默认puppeteer是开启headless模式的,也就是脚本运行过程,看不到chromium的界面显示 如果要关闭headless模式,也是要在启动项配置

1.1K10

不仅仅可以用来做爬虫,Puppeteer 还可以干这个!

我们将一步一步介绍如何利用 Puppeteer 掘金上自动发布文章。...Puppeteer 简介 ? 这里摘抄 Puppeteer 的 Github 主页上的定义(英文)。...由于官方的安装教程没有考虑到已经安装了 Chromium 的情况,我们这里使用一个第三方库 puppeteer-chromium-resolver,它能够自定义Puppeteer 以及管理 Chromium...Puppeteer 常用命令 Puppeteer 的官方API文档是 https://pptr.dev/ ,文档里有详细的 Puppeteer 的开放接口,可以进行参考,这里我们只列出一些常用的接口命令...我们基类 BaseSpider 预留了一个方法来完成选择分类、标签等操作,继承后的类 JuejinSpider 是这样的: async afterInputEditor() {

2.5K30

【技术创作101训练营】用NodeJS来入门爬虫

以及为什么要有爬虫,然后是怎么去做爬虫 ,最后是扩展与总结 image.png 第三页演讲稿: 什么是爬虫就是,嗯我们写了一个爬虫程序,然后它会像爬虫一样,然后互联网各处进行无休止的, 自动的去模仿人...我们就可以使用Puppeteer,然后获取输入框,然后进行模拟输入用户名密码,然后去模拟点击登录,进行登录; 或者去可以自己的浏览器里去进行一次登录,然后去开发的工具去拿到当前的cookie或者token...之类的,然后代码请求带上,就可以直接带登录态请求了....视频: https://cloud.tencent.com/developer/video/10541 相关资料: Puppeteer中文文档: https://zhaoqize.github.io/...puppeteer-api-zh_CN/#/ Cheerio中文文档: https://github.com/cheeriojs/cheerio/wiki/Chinese-README Got文档: https

2K30
领券