美文网首页web前端nodejs
用node爬电子书(2)

用node爬电子书(2)

作者: 姜治宇 | 来源:发表于2020-12-21 18:07 被阅读0次

上次我们学习了$$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();

有了自动点击和输入后,我们就可以模拟提交表单了,这个跟人操作是一样的,管你做什么反扒策略都没用。

相关文章

网友评论

    本文标题:用node爬电子书(2)

    本文链接:https://www.haomeiwen.com/subject/ooarnktx.html