官方文档:https://www.selenium.dev/selenium/docs/api/javascript/index.html
初始化
npm init -y
安装selenium-webdriver
npm install selenium-webdriver --save
安装chromedriver
npm install chromedriver --chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver
xpath
https://www.runoob.com/xpath/xpath-tutorial.html
xpath定位元素
//input[@id=“kw”]
//a[@name=“tj_trhao123”]
//div[@id=“u1”]/a[3]
css元素选择器
https://www.runoob.com/cssref/css-selectors.html
安装typescript
npm install -g typescript
npm install @types/selenium-webdriver --save-dev
Selenium Web自动化05-使用typescript并设置单例模式
import { SingleInstance } from './singleInstance'
// 日期控件指定时间
async function main() {
const driver = SingleInstance.create_drive();
await driver.get("https://www.ctrip.com/");
let jsscript = `document.querySelector('input[id="HD_CheckIn"]').value = "2020-03-03"`
// await driver.executeScript(jsscript)
await driver.executeScript((val: string)=> {
// 执行js方法
let dom = document.querySelector('input[id="HD_CheckIn') as HTMLInputElement;
dom.value = val;
}, "2020-02-02")
}
main();
运行
node excutejs.js
Selenium Web自动化07-Action模拟行为操作
// https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/actions_exports_LegacyTouchSequence.html
import { SingleInstance } from "./singleInstance"
async function run() {
const driver = SingleInstance.create_drive();
await driver.get("https://www.baidu.com/");
const ele = await driver.findElement({ css: 'a[name="tj_briicon"]' });
const actions = driver.actions();
// 移动到 ele 暂停1s perform执行action
await actions.move({ origin: ele }).pause(1000).perform();
// 寻找mp3元素
const mp3 = await driver.findElement({ css: 'a[name="tj_mp3"]' });
// 移动到元素上
await actions.move({ origin: mp3 }).click().perform();
}
run();
运行
百度识图
import { SingleInstance } from "./singleInstance"
// 百度识图
async function run() {
const driver = SingleInstance.create_drive();
await driver.get("https://www.baidu.com/");
const soutu = await driver.findElement({ css: 'span[class="soutu-btn"]' });
await soutu.click();
const upload = await driver.findElement({ css: 'input[class="upload-pic"]' });
// 设置文件路径(绝对路径)
await upload.sendKeys(__dirname + '/timg.jpg');
}
run();
alert相关
import { SingleInstance } from './singleInstance';
async function run (){
const driver = SingleInstance.create_drive();
await driver.get('http://39.107.96.138:3000/signin');
const username = await driver.findElement({css:'#name'})
await username.sendKeys('test10');
const password = await driver.findElement({css:'#pass'})
await password.sendKeys('123456');
const submit = await driver.findElement({css:'[type="submit"]'});
await submit.click();
await driver.get('http://39.107.96.138:3000/user/test10');
const ele = await driver.findElement({css:'a[class="topic_title"]'});
await ele.click();
const del = await driver.findElement({css:'[title="删除"]'});
await del.click();
// 切换到窗口页面
const alert= await driver.switchTo().alert();
// 获取文本
console.log(await alert.getText());
// 删除
await alert.accept();
}
run();
切换ifram
import { SingleInstance } from './singleInstance';
async function run() {
const driver = SingleInstance.create_drive();
await driver.get('https://login.anjuke.com/login/form');
// 1. iframe webelement;
const iframe = await driver.findElement({ css: 'iframe#iframeLoginIfm' })
await driver.switchTo().frame(iframe);
const phone = await driver.findElement({ id: "phoneIpt" });
await phone.sendKeys("1234567")
// 从iframe切换出来
await driver.switchTo().defaultContent();
// 切到"关于我们"
const ele = await driver.findElement({ css: 'a[rel="nofollow"]' });
await ele.click();
}
run();
切换新的tab
import { SingleInstance } from "./singleinstance";
async function run (){
const driver = SingleInstance.create_driver();
await driver.get("https://www.baidu.com/");
const input = await driver.findElement({css:'#kw'});
await input.sendKeys("helloworld");
const btn = await driver.findElement({css:'#su'});
await btn.click();
await driver.sleep(2000);
const res = await driver.findElement({css:'div[id="1"]>h3>a'});
await res.click();
// 切换窗口
const allwindows = await driver.getAllWindowHandles();
await driver.switchTo().window(allwindows[1]);
const baikeInput = await driver.findElement({css:'#query'});
await baikeInput.clear();
await baikeInput.sendKeys("hahahah");
}
run();
等待
import { SingleInstance } from './singleInstance'
import { until, By } from 'selenium-webdriver';
async function run() {
const driver = SingleInstance.create_drive();
await driver.get("https://www.baidu.com/");
const input = await driver.findElement({ css: '#kw' });
await input.sendKeys("helloworld");
const btn = await driver.findElement({ css: '#su' });
await btn.click();
// 等待元素加载出来 最长等待时间为10秒
const res = await driver.wait(until.elementLocated(By.css('div[id="1"]>h3>a')), 10 * 1000);
// await driver.sleep(2000);
// const res = await driver.findElement({css:'div[id="1"]>h3>a'});
await res.click();
}
run();