基本用法
无头模式 打开浏览器跳转指定的页面
实现无头自动登录github页面的 iframes 页面 获取某个标签操作
安居客 登录页 代码
尝试百度自动登录
基本用法
看官方的入门的 DEMO
依赖于 node
安装 npm install puppeteer
或 yarn add puppeteer
代码执行 node xxxx.js
1
例 建立a.js
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();
})();
上面这段代码就实现了网页截图,先大概解读一下上面几行代码:
先通过 puppeteer.launch() 创建一个浏览器实例 Browser
先通过 puppeteer.launch() 创建一个浏览器实例 Browser 对象
然后通过 Browser 对象创建页面 Page 对象
然后 page.goto() 跳转到指定的页面
调用 page.screenshot() 对页面进行截图
关闭浏览器
无头模式 打开浏览器跳转指定的页面
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless:false, //无头模式
});
const page = await browser.newPage();
await page.goto('https://www.baidu.com');
// await page.screenshot({
// path: `${Date.now()}.png`
// });
// await browser.close()
})();
运行 node xxxx.js
})();
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
//无头模式
headless:false,
});
const page = await browser.newPage();
await page.goto('https://github.com/login');
//截屏
// await page.screenshot({
// path: `${Date.now()}.png`
// });
//获取dom 节点
let username=await page.$('#login_field')
let password=await page.$('#password')
console.log(username,password);
// DOM制动填写表单--登录---------------------------------
await page.type('#login_field', 'xxxxxxxx@qq.com',{
delay:500
})
await page.type('#password', 'xxxxxxxxxxxxx',{
delay:500
})
let loginBtn =await page.$('#login > div.auth-form-body.mt-3 > form > input.btn.btn-primary.btn-block')
loginBtn.click()
//关闭浏览器
// await browser.close()
})();
例子 :进入百度 账号登录页
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
//无头模式
headless:false,
});
const page = await browser.newPage();
await page.goto('https://www.baidu.com/');
let loginbtn= await page.$('#u1 > a')
loginbtn.click()
//frames返回所有iframes标签 =
await page.frames().map(frame=>{console.log(frame.url())});
//定位到指定iframes页面
const frame= await page.frames().find(frame=>frame.url().includes('https://www.baidu.com/'))
//获取dom节点
let LoginBtn = await
frame.waitForSelector('#TANGRAM__PSP_11__footerULoginBtn')
LoginBtn.click()
})();
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
//无头模式
headless: false,
});
const page = await browser.newPage();
await page.goto('https://login.anjuke.com/login/form');
await page.frames().map(frame => { console.log(frame.url()) });
const targetUrl='https://login.anjuke.com/login/iframeform'
//frames返回所有iframes标签
const frame = await page.frames().find(frame => frame.url().includes(targetUrl))
let phone= await frame.waitForSelector('#phoneIpt')
await phone.type('123456')
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
//无头模式
headless: false,
});
const page = await browser.newPage();
await page.goto('https://www.baidu.com');
await page.frames().map(frame => { console.log(frame.url()) });
const user_btn= await page.waitForSelector('#u1 > a')
await user_btn.click()
const user_login_btn= await page.waitForSelector('#TANGRAM__PSP_11__footerULoginBtn')
await user_login_btn.click()
const username = await page.waitForSelector('#TANGRAM__PSP_11__userName')
await username.type('xxxxx')
let password =await page.waitForSelector('#TANGRAM__PSP_11__password')
await password.type('xxxxx',{
delay:200
})
///登录
const LOGIN = await page.waitForSelector('#TANGRAM__PSP_11__submit')
await LOGIN.click()
//验证-------------无
// const slider = await page.waitForSelector('#vcode-spin-button270')
const myFollow = await page.waitForSelector('#s_menu_mine')
await myFollow.click({
delay:1000
})