最近在逛社区的时候发现了个大佬在博客中分享了上千本电子书资源,尽管我的网盘中已经堆积了很多电子书了。。。
我可以不看,但是我不能没有!
我可以留着给我儿子看啊,哈哈哈~
上千本电子书每一本都是一个分享链接,要一个个保存分享,这很不友好啊,没办法只能自己想办法了,说干就干。
之前有使用selenium做过一个自动化测试的项目,觉得可以使用selenium搞一个自动保存的程序。
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。你怎么利用这种力量完全取决于你自己。它主要是为了测试目的自动化 Web 应用程序,但当然不仅限于此。
Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 Webdriver 是一个 API 和协议,它定义了一个语言中立的接口,用于控制 web 浏览器的行为。 每个浏览器都有一个特定的 WebDriver 实现,称为驱动程序。 驱动程序是负责委派给浏览器的组件,并处理与 Selenium 和浏览器之间的通信。
这种分离是有意识地努力让浏览器供应商为其浏览器的实现负责的一部分。 Selenium 在可能的情况下使用这些第三方驱动程序, 但是在这些驱动程序不存在的情况下,它也提供了由项目自己维护的驱动程序。
在项目pom文件中添加依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.7.1</version>
</dependency>
引用第三方驱动库,可以自动适配浏览器版本,节省自己去下载驱动的时间
在项目pom文件中添加依赖
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
代码示例:
import io.github.bonigarcia.wdm.WebDriverManager;
// 启动
WebDriverManager.chromedriver().setup();
// 初始化浏览器
WebDriver driver = new ChromeDriver();
System.setProperty("webdriver.chrome.driver","/path/to/chromedriver");
ChromeDriver driver = new ChromeDriver();
Selenium Manager可以帮助你获得一个运行Selenium的开箱即用的环境。 如果在PATH
中没有找到Chrome、Firefox和Edge的驱动,Selenium Manager的Beta 1版将为它们配置。 不需要额外的配置。如果有必要,Selenium Manager的未来版本也会在必要时一同下载浏览器。
打开浏览器,访问
@Test
@SneakyThrows
public void test() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
// 访问掘金
driver.get("https://juejin.cn/");
// 获取标题
String title = driver.getTitle();
System.out.println(title);
// 停留2s
Thread.sleep(2000);
// 退出浏览器
driver.quit();
}
刚使用的时候,经常定位不到元素,大部分原因就是页面还没加载完成,程序执行太快去查找元素的时候就找不到。为了避免这种情况,可以设置等待策略,尝试定位元素之前, 确保该元素位于页面上, 并且在尝试与该元素交互之前, 该元素处于可交互状态。
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
这种策略也无法满足所有场景,可以尝试另一种比较暴力的方式
Thread.sleep(3000);
自动化操作大部分要基于指定元素操作,比如说点击“确定”按钮,就要找到按钮的元素,主要查找方式有以下几种:
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
WebElement element1 = driver.findElement(By.xpath("//span[@class='EOGexf']"));
语法很简单,网上查一下就好了,这边就不多讲了。
操作步骤:
示例代码(循环保存分享链接文件):
@Test
@SneakyThrows
public void autoSaveBook() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
// 登录账号时间
Thread.sleep(15000);
driver.get("https:XXXX");
// 查找文件复选框
val element1 = driver.findElement(By.xpath("//span[@class='EOGexf']"));
// 点击选中
element1.click();
// 查找“保存到网盘”按钮并点击
val e2 = driver.findElement(By.xpath("//em[@class='icon icon-save-disk']/../span"));
e2.click();
// 强制等待1s,应为下一步操作元素要等点击e2后才能显示,不等待的话可能导致下一步失败
Thread.sleep(1000);
// 查找“确定”按钮并点击
val e3 = driver.findElement(By.xpath("//a[@class='g-button g-button-blue-large']"));
e3.click();
Thread.sleep(3000);
System.out.println("收藏成功");
driver.quit();
}
效果演示:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有