首先介绍一下selenium-webdriver,官网上已经说的很明白selenium-webdriver是浏览器自动化库,说白了也就是可以模拟人的行为操作,做一些重复智能化的事情,比如:爬虫和自动化测试。。
第一步,找到浏览器的版本号,我这里用的chrome版本是100.0.4896.60,通过官网(http://chromedriver.storage.googleapis.com/index.html)提供的地址下载驱动放到项目的根节点上。
image.pngimage.png
第二步,下载依赖(node和selenium-webdriver)
npm install node --save
npm install selenium-webdriver --save
第三步,讲解编程思路
引用依赖包,依赖包结构出Builder构造函数,利用Builder构造函数实例化一个有关chrome的对象,通过get打开一个地址,findElement找到对应的元素进行操作,click是点击元素、sendKeys是输入内容。这里有个细节要注意:通过click打开新窗口时,就会存在多个窗口的情况,程序会停留在第一个窗口,会出现找不到元素的情况,这里不要急,找到下一个窗口的句柄,通过switchTo进行切换。
const {Builder, By, Key, until} = require('selenium-webdriver');
(async function example() {
let driver = await new Builder().forBrowser('chrome').build();
try {
await driver.get('https://www.jianshu.com/u/bf59b68d2fb6');
await driver.findElement(By.xpath('//*[@id="note-91073860"]/div/a')).click();
let curhandle = await driver.getWindowHandle();
let allhandle = await driver.getAllWindowHandles();
console.log("curhandle:",curhandle);
console.log("allhandle:",allhandle);
let nexthandle = "";
for(var i=0;i<allhandle.length;i++){
if(curhandle==allhandle[i]){
nexthandle = allhandle[i+1]
}
}
await driver.switchTo().window(nexthandle);
let title = await driver.getTitle();
console.log(title);
await driver.findElement(By.xpath('//*[@id="__next"]/footer/div[1]/div[1]/div/textarea')).sendKeys('大神,66666');
await driver.findElement(By.xpath('//*[@id="__next"]/footer/div[1]/div[1]/div/i')).click();
await driver.findElement(By.xpath('//*[@id="__next"]/footer/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[1]/span[41]')).click();
} finally {
// await driver.quit();
}
})();
网友评论