上次我们学习了$$eval的用法,可以解析出一些数据,但这样还不够,因为这仅仅达到了cheerio的作用,puppeteer的功能还远远不止于此。
浏览器可以做很多事情,比如点击、输入等动作,我们都可以模拟。
自动点击
我们试着写一下模拟点击的动作。
let puppeteer = require('puppeteer');
async function test() {
//打开浏览器
let brower = await puppeteer.launch({ headless: false,width:1000,height:800 });
//打开新页面
let page = await brower.newPage();
//输入网站信息
await page.goto('https://sobooks.cc/');
//匹配页面元素,相当于jq的$('.metacat >a')
let elementHandler = await page.$$('.metacat >a'); // elementHandler得到了多个dom元素
elementHandler[1].click()
}
test();
我们知道,事件必须是挂载到dom元素上的,因此我们要做点击动作,就必须先筛选出dom元素来,page.$$的意思其实跟jquery的dom选择器是一样的,可以筛选出dom元素来,区别是page.$$表示筛选出多个dom元素,page.$是只筛选一个dom元素。
自动输入
let puppeteer = require('puppeteer');
async function test() {
//打开浏览器
let brower = await puppeteer.launch({ headless: false,width:1000,height:800 });
//打开新页面
let page = await brower.newPage();
//输入网站信息
await page.goto('https://sobooks.cc/');
//匹配多个元素,相当于jq的$('.metacat >a')
// let elementHandler = await page.$$('.metacat >a'); // elementHandler得到了多个dom元素
// elementHandler[1].click()
//匹配单个元素,搜索按钮
let searchBtn = await page.$('.toggle-search');
//点击才能出现搜索框,巨傻逼
await searchBtn.click();
//匹配单个元素,输入框
let searchHandler = await page.$('input[class="search"]');
//将光标移入搜索框
await searchHandler.focus();
//输入内容
await page.keyboard.type('封神演义');
//回车
await page.keyboard.press('Enter');
}
test();
有了自动点击和输入后,我们就可以模拟提交表单了,这个跟人操作是一样的,管你做什么反扒策略都没用。
网友评论