puppeteer(headless chrome)实现网站登录
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)实现网站登录相关推荐
- 在Docker中使用Python Selenium和Headless Chrome进行网站自动化测试的方法
by Joyz 通过乔伊斯 在Docker中使用Python Selenium和Headless Chrome进行网站自动化测试的方法 (A recipe for website automated ...
- Puppeteer -headless Chrome 的 Node.js API
Puppeteer 是一个控制 headless Chrome 的 Node.js API .它是一个 Node.js 库,通过 DevTools 协议提供了一个高级的 API 来控制 headles ...
- 如何通过Chrome查看网站登录 Cookie 信息
方法一 1.打开浏览器设置选项,或者直接在浏览器打开 chrome://settings/content,进入内容设置选项,可以看到cookie基本设置.如图: 2.点击所有Cookie和网站数据即可 ...
- Google Puppeteer加入到headless Chrome的工具行列
Chrome DevTools团队发布了Puppeteer,一个基于Node API的headless Chrome工具.Puppeteer提供了与其他第三方工具相似的功能,促使它们不断地创新与进步. ...
- centos安装使用puppeteer和headless chrome
Google推出了无图形界面的headless Chrome之后,可以直接在远程服务器上直接跑一些测试脚本或者爬虫脚本了,猴开心!Google还附送了Puppeteer用于驱动没头的Chome. 阿里 ...
- 实例:使用puppeteer headless方式抓取JS网页
puppeteer google chrome团队出品的puppeteer 是依赖nodejs和chromium的自动化测试库,它的最大优点就是可以处理网页中的动态内容,如JavaScript,能够更 ...
- Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案
为什么需要 Rendertron? 传统的 Web 页面,通常是服务端渲染的,而随着 SPA(Single-Page Application) 尤其是 React.Vue.Angular 为代表的前端 ...
- 用Python驱动Headless Chrome
Headless Browser(无头的浏览器)是什么鬼? 简而言之,Headless Browser是没有图形用户界面(GUI)的web浏览器,通常是通过编程或命令行界面来控制的. Headless ...
- python chrome headless_使用Python控制Headless Chrome
首先要解释一下 Headless Chrome,通俗的讲就是运行一个没有GUI的Chrome,在 Headless Chrome 出现以前有 PhantomJS ,但是自从 Headless Chro ...
最新文章
- struts2默认配置文件 struts-default.xml
- 三维重建13:点云的局部特征总结
- SAP HANA CLOUD和aws一个实际项目中的性能比较
- MMKV集成与原理,薪资翻倍
- 【翻译】在Sencha Touch中创建离线/在线代理
- 了解SQL Server数据库静态数据及其如何适合数据库生命周期管理
- 聚合函数的计算机控件,sql – 当我们在联接中使用聚合函数时如何使用Group By子句?...
- [Soft]软件技术的两个趋势
- Linux中service命令和/etc/init.d/的关系
- ENVI/IDL编程:相对辐射校正-直方图匹配
- 用照片进行三维模型重建
- S3C2440 蜂鸣器 汇编语言,S3C2440的基础功能模块实现过程
- mysql报错You do not have the SUPER privilege and binary logging is enabled
- Python matplotlib label设置斜体字符
- iphone红外传感器
- SQL 审核查询平台
- 汉语拼音拼读的小技巧
- CSDN的C币获得方法
- oracle 19c 由于MGA产生的文件扩展不足导致的ORA-04030
- Kaggle时间序列(Time Series)教程 6-使用机器学习预测(forecasting-with-machine-learning)