1、环境准备
selenium 的本质是模拟用户点击浏览器的,所以要具备以下条件
1、gui桌面环境
2、安装谷歌浏览器或者火狐浏览器,或者其他的。windows系统也支持ie和edge
3、下载 webdriver,浏览器对应的webdriver不同,将下载的webdriver放到 PATH
下载地址
https://www.selenium.dev/documentation/en/webdriver/driver_requirements/#quick-reference
2、创建工程,添加依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
3、 实现
@Scheduled(cron = "0 30 6 * * ?")
public void report(){
Properties properties = new Properties();
try {
properties.load(new ClassPathResource("accounts.properties").getInputStream());
properties.entrySet().stream().forEach(objectObjectEntry -> {
logger.debug("开始自动打卡::{}", objectObjectEntry.getKey());
String value = (String) objectObjectEntry.getValue();
String[] acc = value.split(",");
doReport(acc[0],acc[1]);
});
} catch (IOException e) {
e.printStackTrace();
}
}
WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10).getSeconds());
try {
logger.debug("开始登陆");
driver.get("你要测试的网站地址");
driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/div[1]/input")).sendKeys(id);
driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/div[2]/input")).sendKeys(pass);
driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/div[3]")).click();
WebElement daka = wait.until(presenceOfElementLocated(By.xpath("//*[@id=\"app\"]/div/div[2]/div/div[2]/div[1]/div[2]/div[3]/ul/li[1]/div")));
logger.debug("登陆成功");
// TODO 查看面板是否有公告,读公告
// 填报温度,提交
logger.debug("开始点击每日打卡");
daka.click();
WebElement tem = wait.until(presenceOfElementLocated(By.xpath("//*[@id=\"app\"]/div/div[2]/div[5]/div[2]/span/div/input")));
logger.debug("进入每日打卡填报页面");
tem.clear();
// 生成随机温度
String temperature = new java.text.DecimalFormat("#.0").format(36d + (Math.random() * 0.7d + 0.1d));
logger.debug("生成随机温度:: {}",temperature);
tem.sendKeys(temperature);
logger.debug("提交上报");
driver.findElement(By.xpath("//*[@id=\"app\"]/div/div[3]/div")).click();
// 提交后进入面板页面
daka = wait.until(presenceOfElementLocated(By.xpath("//*[@id=\"app\"]/div/div[2]/div/div[2]/div[1]/div[2]/div[3]/ul/li[1]/div")));
logger.debug("提交上报成功");
} finally {
driver.quit();
}
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!