准备
- node.js 的安装和配置
- Selenium-webdriver
npm install -save selenium-webdriver
- 驱动 chromedriver
npm install chromedriver
基本使用
(async ()=>{
//导入chrome浏览器 driver
require('chromedriver');
//导入selenium 库
const {Builder, By, Key, until,Button} = require('selenium-webdriver');
//这里我使用的chrome
const driver = new Builder().forBrowser('chrome').build()
await driver.get('https://blog.csdn.net/weixin_45292658/article/details/107149753') //想要打开的网址
await driver.manage().window().maximize(); //实现浏览器窗口最大化
//driver.quit() // 表示关闭浏览器
//driver.close() //表示关闭当前窗口
})()
选择器
///这里的driver和By是基本使用里面定义过
driver.findElement(By.name('btnG'));
driver.findElement({id:'btnG'});
findElements //查找多个元素By.className(classname)
By.css(selector) //css-selector
By.id(id)
By.name(name)
By.linkText(text)
By.partialLink(text)
By.xpath()
By.js()
属性获取
driver.getPageSource().then(function(souce) {console.log(souce);//获取代码
driver.getTitle().then(a=>{console.log(a)});//获取网页标题
driver.getCurrentUrl().then(a=>{console.log(a)});//获取当前url
//element为web元素对象,为findelement()的返回对象element.getText().then(b=>{console.log(“text”,b)})
//返回里面没有被隐藏的文字(不带标签)
element.getTagName().then(a=>{console.log('getTagName',a)})
//返回标签名
element.getId().then(a=>{console.log(“ID”,a)})
//返回这个element服务器分配的不透明id
elements.getCssValue().then(a=>{console.log('getCssValue',a)})
//返回该element的CSS属性
//其他属性:element.getAttribute(“class”).then(b=>{console.log(b)})
等待
有时对一些元素需要等待页面跳转或操作完成才会显示,如果操作耗时或者网络原因,如果该元素还没出现就进行操作可能会跑出异常,这是我们需要设置一些等待,等待该元素出现在页面上时才能进行操作
driver.wait(until.elementLocated(By.id('id')), 10000);/等待元素
driver.wait(function() {
return driver.getTitle().then(function(title) { console.log(11111111);
return title === 'webdriver - Google Search';
});
}, 1000);
driver.wait(until.titleIs('webdriver - Google Search'), 10000)
//settimeouts
driver.manage().setTimeouts(args)
// args参数
{implicit: (number|null|undefined), pageLoad: (number|null|undefined), script: (number|null|undefined)}
implicit:等待元素加载的最大时间;pageLoad等待页面加载完成的最大时间
操作
driver.findElement({css:css}).click()//鼠标左键单击
driver.findElement({css:css}).clear(); //清空input
driver.findElement({css:css}).sendKeys('txt');//输入input
driver.takeScreenshot().then() //返回页面png截图
driver.findElement({css:css}).takeScreenshoot().then() //返回元素png截图
driver.excuteScript("document.getElementByTagName('body')[0].scrollTop='8000'")//窗口滚动条-下拉滚动条操作
driver.actions().mouseMove(el).perform() //鼠标悬停操作
options对象
let options = driver.manage()//获得options对象
options.addCookie({name: 'name', value:'value'})
options.deleteAllCookies()
cookiesoptions.deleteCookie(name) //删除所有
options.getCookie(name) //按照name删除
options.getCookies() //拿到name字段的cookie值,为promise对象
//返回所有cookies,为promise对象
navigate对象
let nav = driver.navigate()//获得navigate对象
///nav有四个方法分别为:
nav.back();//后退
nav.forward();//前进
nav.refresh();//刷新
nav.to(url);//跳转到url