puppeteer简介

puppeteer是Chrome团队开发的一个node库,可以通过api来控制浏览器的行为,比如点击,跳转,刷新,在控制台执行js脚本等等。有了这个神器,写个爬虫,自动签到,网页截图,生成pdf,自动化测试什么的,都不在话下。

puppeteer的简单例子

代码来自官网:

const puppeteer = require('puppeteer');(async () => {const browser = await puppeteer.launch();//打开浏览器const page = await browser.newPage();//打开一个空白页await page.goto('https://example.com');//在地址栏输入网址并等待加载await page.screenshot({path: 'example.png'});//截个图await browser.close();//关掉浏览器
})();

阅读上述代码,我们可以发现,1,代码中每一步都是异步操作,2,每一步操作都对应实际使用浏览器的一个行为。理解这两点对使用这个库有很大帮助。另外,比较常用的两个对象就是browser和page对象,对象上有一堆用来操作两个对象的方法。接下来,我们就写一个登录网站的小demo。

没有验证码的网站

对于没有验证码的网站,基本上就是输入账号,输入密码,点击登录这三步,需要用到page对象的两个方法:type用来在输入框中输入信息,click用来点击登录。下面以登录豆瓣为例来举个例子:

const puppeteer = require('puppeteer');
const account = `123456@qq.com`;
const password = `123456`;
(async () => {const browser = await puppeteer.launch();//打开浏览器const page = await browser.newPage();//打开一个空白页await page.goto('https://www.douban.com/');//打开豆瓣网站await page.type('#form_email', account);    await page.type('#form_password', password);await page.click('.bn-submit');await page.waitForNavigation({waitUntil: 'load'});//等待页面加载出来,等同于window.onloadawait page.screenshot({path: 'example.png'});//截个图await browser.close();//关掉浏览器
})();

有人说,我怎么知道到底有没有登录成功呢,一种调试的办法就是使用screenshot,如果你看到的是一个验证码页面,说明没有登录成功,还有一种办法像下面这样:

 const browser = await puppeteer.launch({headless: false});//打开有界面的浏览器

传入headless:false后会真的打开一个浏览器的界面,这样你就可以实时看到代码执行到什么地方了。接下来我们说说碰到验证码时怎么办。

有验证码的网站

碰到有验证码的网站,可以将headless设成false,借助界面输入验证码,同时监听页面加载事件,实现登录,代码如下:

...await page.waitForNavigation({waitUntil: 'load'});//等待页面加载出来,等同于window.onload//代码中监听跳转事件
if(page.url() === 'https://www.douban.com/accounts/login'){ //登录不成功console.log('需要输入验证码');//等待再一次跳转while(true){await page.waitForNavigation({waitUntil: 'load'})console.log(page.url())if(page.url() === 'https://www.douban.com/'){console.log('登录成功');break;}}}

整体思路就是写也个循环,不断监听页面跳转,直到浏览器登录成功后跳转到首页为止。

转载于:https://www.cnblogs.com/imgss/p/headless.html

puppeteer(headless chrome)实现网站登录相关推荐

  1. 在Docker中使用Python Selenium和Headless Chrome进行网站自动化测试的方法

    by Joyz 通过乔伊斯 在Docker中使用Python Selenium和Headless Chrome进行网站自动化测试的方法 (A recipe for website automated ...

  2. Puppeteer -headless Chrome 的 Node.js API

    Puppeteer 是一个控制 headless Chrome 的 Node.js API .它是一个 Node.js 库,通过 DevTools 协议提供了一个高级的 API 来控制 headles ...

  3. 如何通过Chrome查看网站登录 Cookie 信息

    方法一 1.打开浏览器设置选项,或者直接在浏览器打开 chrome://settings/content,进入内容设置选项,可以看到cookie基本设置.如图: 2.点击所有Cookie和网站数据即可 ...

  4. Google Puppeteer加入到headless Chrome的工具行列

    Chrome DevTools团队发布了Puppeteer,一个基于Node API的headless Chrome工具.Puppeteer提供了与其他第三方工具相似的功能,促使它们不断地创新与进步. ...

  5. centos安装使用puppeteer和headless chrome

    Google推出了无图形界面的headless Chrome之后,可以直接在远程服务器上直接跑一些测试脚本或者爬虫脚本了,猴开心!Google还附送了Puppeteer用于驱动没头的Chome. 阿里 ...

  6. 实例:使用puppeteer headless方式抓取JS网页

    puppeteer google chrome团队出品的puppeteer 是依赖nodejs和chromium的自动化测试库,它的最大优点就是可以处理网页中的动态内容,如JavaScript,能够更 ...

  7. Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案

    为什么需要 Rendertron? 传统的 Web 页面,通常是服务端渲染的,而随着 SPA(Single-Page Application) 尤其是 React.Vue.Angular 为代表的前端 ...

  8. 用Python驱动Headless Chrome

    Headless Browser(无头的浏览器)是什么鬼? 简而言之,Headless Browser是没有图形用户界面(GUI)的web浏览器,通常是通过编程或命令行界面来控制的. Headless ...

  9. python chrome headless_使用Python控制Headless Chrome

    首先要解释一下 Headless Chrome,通俗的讲就是运行一个没有GUI的Chrome,在 Headless Chrome 出现以前有 PhantomJS ,但是自从 Headless Chro ...

最新文章

  1. struts2默认配置文件 struts-default.xml
  2. 三维重建13:点云的局部特征总结
  3. SAP HANA CLOUD和aws一个实际项目中的性能比较
  4. MMKV集成与原理,薪资翻倍
  5. 【翻译】在Sencha Touch中创建离线/在线代理
  6. 了解SQL Server数据库静态数据及其如何适合数据库生命周期管理
  7. 聚合函数的计算机控件,sql – 当我们在联接中使用聚合函数时如何使用Group By子句?...
  8. [Soft]软件技术的两个趋势
  9. Linux中service命令和/etc/init.d/的关系
  10. ENVI/IDL编程:相对辐射校正-直方图匹配
  11. 用照片进行三维模型重建
  12. S3C2440 蜂鸣器 汇编语言,S3C2440的基础功能模块实现过程
  13. mysql报错You do not have the SUPER privilege and binary logging is enabled
  14. Python matplotlib label设置斜体字符
  15. iphone红外传感器
  16. SQL 审核查询平台
  17. 汉语拼音拼读的小技巧
  18. CSDN的C币获得方法
  19. oracle 19c 由于MGA产生的文件扩展不足导致的ORA-04030
  20. Kaggle时间序列(Time Series)教程 6-使用机器学习预测(forecasting-with-machine-learning)

热门文章

  1. Excel组件DCOM配置
  2. muduo之ThreadLocal
  3. c_str()和strcasecmp
  4. C++中在什么时候需要使用“常引用”?
  5. 本题主要考查指针与数组
  6. Ubuntu14.04安装nvidia-docker2
  7. Python 基础常用数据结构
  8. ubuntu 启动器
  9. C# WinForm中 让控件全屏显示的实现代码
  10. 开启虚拟化技术之旅---1什么是虚拟化?