众所周知,puppeteer是个爬虫利器,但是在遇到一些验证码很强大的网站时,你是不是在突破登录的限制的一步被弄得焦头烂额? 本文不会告诉你如何通过脚本突破验证码,而是提供一种另辟蹊径的方法。首先介绍下文本大题内容。本文提供的一个方案是先通过脚本启动浏览器,然后人工方式输入登录信息,然后再次通过脚本爬取页面内容。 用到的主要api分别是

browser.wsEndpoint()
puppeteer.connect()
复制代码

完整代码如下

// launch.js
const puppeteer=require('puppeteer');
const fs=require('fs');
const launchConfig={headless:false
};
puppeteer.launch(launchConfig).then(browser=>{const wsEPAddress=browser.wsEndpoint();const w_data=new Buffer(wsEPAddress);fs.writeFile(__dirname + '/wsa.txt', w_data, {flag: 'w+'}, function (err) {if(err) {console.error(err);} else {console.log('写入成功');}});
});
复制代码
// aciton.js
const puppeteer=require('puppeteer');
const fs=require('fs');
const getWSAddress=()=>new Promise(resolve => {fs.readFile(__dirname + '/wsa.txt', {flag: 'r+', encoding: 'utf8'}, function (err, data) {if(err) {console.error(err);return;}console.log(data);resolve(data);});
});
(async ()=>{const wsa=await getWSAddress();const browserConfig={browserWSEndpoint :wsa};const browser= await puppeteer.connect(browserConfig);const page=await browser.newPage();// todo 你的脚本内容
})().catch(err=>{console.log(err);process.exit();
});
复制代码

代码简析,launch.js主要负责启动浏览器,并记录浏览器的wsEndpoint地址,此处简单处理用fs直接写在本地目录(如果你有其他数据缓存方案,可以替代它);aciton.js主要负责脚本任务,这个文件是用来写登录后的具体脚本命令的。 整体运行方案先node relativePathTo/launch.js,手工在打开的浏览器完成登录操作,然后再node relativePathTo/aciton.js完成具体脚本。注意,本文中两个文件是处在同一目录下的,因为用来传递browserWSEndpoint的文件使用相对路径存放,如果想更改,也是可以的,但不是文章重点。 以上是一次使用puppeteer实践的记录~如果你有更好的方案实现,欢迎留言~

转载于:https://juejin.im/post/5c613fe7e51d45098b607724

puppeteer中如何复用启动中的浏览器相关推荐

  1. AR9331中Linux内核启动中与IRQ中断相关的文件

    先列出框架,具体后继再来分析. 首先是lds文件,该文件设置了各个section在FLASH或RAM中的先后顺序. 位于~/openwrt1407/build_dir/target-mips_34kc ...

  2. springboot项目中的注解 启动项目的方式 解决spring的bean.xml配置不生效 spring的基础JDBC配置

    依赖 创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent ,也可以不继承 先来看 parent 的基本功能有哪些? 定义了 Java 编译版 ...

  3. 可以查看计算机主要自启动项的技术,电脑中怎么查看启动项

    电脑中怎么查看启动项 腾讯视频/爱奇艺/优酷/外卖 充值4折起 现如今,电脑已经和人们的日常生活与工作息息相关了,当我们在使用电脑处理工作或其他事情的时候,如何查看其中的启动项呢?接下来就由小编来告诉 ...

  4. Android10开机向导中复用设置中的Wifi界面

    很多时候我们需要定制开机向导,在开机向导界面我们一般会实现联网和设置时间等功能,考虑复用与稳定性问题,我们最好复用设置中的WiFi设置和日期设置.但是设置中的wifi设置界面默认是没有下一步按钮的,这 ...

  5. Linux 中创建 USB 启动盘来拯救 Windows 用户

    WoeUSB 可以在 Linux 中制作 Windows 启动盘,并帮助你的朋友解锁他们罢工的机器. 人们经常要求我帮助他们恢复被锁死或损坏的 Windows 电脑.有时,我可以使用 Linux US ...

  6. 问题解决10使用带有框架的页面跳转到登录页面时,登录页面只显示在子框架中,未能铺满整个浏览器--解决方案如下:...

    问题描述: 使用带有框架的页面跳转到登录页面时,登录页面只显示在子框架中,未能铺满整个浏览器,例如: 当登录信息过期时,点击左边的菜单栏会让登录页面显示在右边的框架中,而不能铺满整个浏览器 解决方案: ...

  7. Vue:利用Vue生成的网页,在浏览器中的标签页中的图标与标题怎么修改为自己的?

    Vue:利用Vue生成的网页,在浏览器中的标签页中的图标与标题怎么修改为自己的? 在解决这个问题的时候,在网上搜到了许多答案,可以说是众说纷纭,作者结合了多个答案,最后解决了这个问题,下面把用到的资源 ...

  8. Web容器启动中执行某个Java类

    1.监听(Listener) <!-- 配置监听 --> <listener> <listener-class>com.xian.jdbc.GetPropertie ...

  9. 线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理

    1.一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续入队的任务.阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线程,使 ...

最新文章

  1. GPU — CPU-GPU 异构计算系统
  2. 模块隐藏(LDR_MODULE链 与 PE特征)
  3. Java描述设计模式(12):外观模式
  4. 面向机器学习的特征工程 三、文本数据: 展开、过滤和分块
  5. Design System Application - Chapter 2 字体 Typography
  6. 中国将在未来几十年主导电动汽车市场
  7. 谈谈项目成本管理遇到的难题及解决措施
  8. 如何在SQL SERVER的windows身份验证添加一个SQL Server身份验证方式
  9. 微信公众平台消息接口开发(8)小黄鸡(小贱鸡)机器人
  10. 口碑营销:如何让传统行业的电商引发口碑效应并营销
  11. 脉搏信号检测与处理系统
  12. Win10下SQL2000 企业管理器 新建表/修改表 崩溃问题的应急
  13. c语言加法器程序代码,利用EDA设计加法器和减法器并且附有程序代码的实验报告...
  14. pca图解读_PCA 图像识别 详解(一)
  15. android 最好的gtd软件,Windows 上的高颜值 GTD 应用,这可能是最棒的一款了:MyerList...
  16. Python操纵Word神器——python-docx大全(含插入pptx图表)
  17. 东北大学计算机学院生产实习,东北大学生产实习报告.doc
  18. 异常解决:java.lang.IllegalStateException: Failed to introspect Class
  19. 阿里云服务器上安装nginx
  20. WDK编译libwdi

热门文章

  1. java impliments,java基础英语---第九天
  2. 怎么从某个div跳转到另一个_另一个伊甸蓝不够时候怎么办 MP没了怎么做
  3. dynatrace统计sql执行时间要考虑网络延时
  4. Ant design pro引入Echarts报错:TypeError: Cannot read property 'x_data' of undefined
  5. android 定时闹钟逻辑,Android 定时执行任务 AlarmManager的使用(可用于闹钟开发)...
  6. 金三银四 | 吃透这套题,面试更有底气
  7. Docker之获取镜像(一)
  8. Redis在Java项目中的依赖
  9. opencv表面缺陷检测_机器视觉表面缺陷检测 光学元件瑕疵检测
  10. 原生JS实现HTML文件上传,HTML5 js实现拖拉上传文件功能