之前有介绍过selenium-webdriver是基于浏览器自动化库,可以模拟用户的行为操作。利用这个自动化库可以开发两个大方向的功能,爬虫和自动化测试。今天的话,我们来讲解一下爬虫技术,这里特别注意:爬虫有风险开发需谨慎。
爬虫的介绍
爬虫是通过程序来获取网络资源,可以通过定时器定时的去爬取网络资源,而不是通过人为的方式去爬取资源。大家常用的搜索引擎就是由很多很多爬虫组成,每个爬虫都会去网络上爬取资源存储自己的数据库中供用户搜索。我们今天来讲解一个分页列表,分为2个步骤:1、模拟用户登录 2、获取列表数据
模拟用户操作
1、打开登录页面,模拟用户输入账户和密码,点击登录按钮跳转到首页
await driver.get('http://localhost:8080/#/login');
await driver.findElement(By.xpath('//*[@id="app"]/div/div/div[1]/input')).sendKeys('123456',Key.RETURN);
await driver.findElement(By.xpath('//*[@id="app"]/div/div/div[2]/input')).sendKeys('123456',Key.RETURN);
await driver.findElement(By.xpath('//*[@id="app"]/div/div/button')).click();
2、模拟用户行为操作页面,使其到达想要爬取的列表页面
await driver.findElement(By.id('detail')).click();
3、获取列表当前页数据,当前页数据获取完成后模拟用户点击下一页,这样依次获取数据,直到数据全部获取完成。注意:一、可以通过获取分页总数,进行遍历来获取数据 二、通过点击下一页获取数据,直到下一页无法在点击,说明已经到最后一页
let ul = await driver.findElement(By.xpath('//*[@id="app"]/div/div[2]/ul'));
let uiItem = await ul.findElements(By.css('.number'));
let maxPage = await uiItem[uiItem.length-1].getText();
for(var i=1;i<maxPage;i++){
let cItem = await driver.findElements(By.css('.el-table__row'));
for(var k=0;k<cItem.length;k++){
let c = await cItem[k].findElements(By.css('.cell'));
let cDate = await c[0].getText();
let cName = await c[1].getText();
let cAddress = await c[2].getText();
await writeSteam.write(`时间:${cDate} 名字:${cName} 地址:${cAddress}`);
await writeSteam.write('\r\n');
}
await driver.sleep(1000);
await driver.findElement(By.xpath('//*[@id="app"]/div/div[2]/button[2]')).click();
}
writeSteam.close();
网友评论