前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动保存上千本技术电子书

自动保存上千本技术电子书

作者头像
iiopsd
发布2022-12-23 08:56:21
8530
发布2022-12-23 08:56:21
举报
文章被收录于专栏:iiopsd技术专栏iiopsd技术专栏

背景

最近在逛社区的时候发现了个大佬在博客中分享了上千本电子书资源,尽管我的网盘中已经堆积了很多电子书了。。。

我可以不看,但是我不能没有!

我可以留着给我儿子看啊,哈哈哈~

上千本电子书每一本都是一个分享链接,要一个个保存分享,这很不友好啊,没办法只能自己想办法了,说干就干。

selenium介绍

之前有使用selenium做过一个自动化测试的项目,觉得可以使用selenium搞一个自动保存的程序。

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。你怎么利用这种力量完全取决于你自己。它主要是为了测试目的自动化 Web 应用程序,但当然不仅限于此。

Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 Webdriver 是一个 API 和协议,它定义了一个语言中立的接口,用于控制 web 浏览器的行为。 每个浏览器都有一个特定的 WebDriver 实现,称为驱动程序。 驱动程序是负责委派给浏览器的组件,并处理与 Selenium 和浏览器之间的通信。

这种分离是有意识地努力让浏览器供应商为其浏览器的实现负责的一部分。 Selenium 在可能的情况下使用这些第三方驱动程序, 但是在这些驱动程序不存在的情况下,它也提供了由项目自己维护的驱动程序。

selenium实践

安装依赖

在项目pom文件中添加依赖

代码语言:javascript
复制
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.7.1</version>
        </dependency>

安装浏览器驱动

1. 驱动管理软件

引用第三方驱动库,可以自动适配浏览器版本,节省自己去下载驱动的时间

在项目pom文件中添加依赖

代码语言:javascript
复制
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.3.1</version>
            <scope>test</scope>
        </dependency>

代码示例:

代码语言:javascript
复制
import io.github.bonigarcia.wdm.WebDriverManager;

// 启动
WebDriverManager.chromedriver().setup();
// 初始化浏览器
WebDriver driver = new ChromeDriver();

2. 硬编码位置

代码语言:javascript
复制
System.setProperty("webdriver.chrome.driver","/path/to/chromedriver");
ChromeDriver driver = new ChromeDriver();

3. 其他

Selenium Manager可以帮助你获得一个运行Selenium的开箱即用的环境。 如果在PATH中没有找到Chrome、Firefox和Edge的驱动,Selenium Manager的Beta 1版将为它们配置。 不需要额外的配置。如果有必要,Selenium Manager的未来版本也会在必要时一同下载浏览器。

demo示例

打开浏览器,访问

代码语言:javascript
复制
@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();
}

等待策略

刚使用的时候,经常定位不到元素,大部分原因就是页面还没加载完成,程序执行太快去查找元素的时候就找不到。为了避免这种情况,可以设置等待策略,尝试定位元素之前, 确保该元素位于页面上, 并且在尝试与该元素交互之前, 该元素处于可交互状态。

代码语言:javascript
复制
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));

这种策略也无法满足所有场景,可以尝试另一种比较暴力的方式

代码语言:javascript
复制
Thread.sleep(3000);

查找定位元素

自动化操作大部分要基于指定元素操作,比如说点击“确定”按钮,就要找到按钮的元素,主要查找方式有以下几种:

代码语言:javascript
复制
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
WebElement element1 = driver.findElement(By.xpath("//span[@class='EOGexf']"));

语法很简单,网上查一下就好了,这边就不多讲了。

自动保存网盘文件

操作步骤:

  1. 加载博客,根据标签获取到所有分享链接并保存到文件
  2. 自动保存文件
    1. 获取所有分享链接
    2. 打开浏览器,登录网盘账号,这步可能涉及手机验证码和图片验证,而且一开始登录一次就可以,所以可以先手动登录账号。
    3. 循环保存分享链接文件
    4. 记录保存成功日志,作为循环重试判断依据
    5. 告诉我儿子他多了1000本书

示例代码(循环保存分享链接文件):

代码语言:javascript
复制
@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();
}

效果演示:

在这里插入图片描述
在这里插入图片描述

THE END.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • selenium介绍
  • selenium实践
    • 安装依赖
      • 安装浏览器驱动
        • 1. 驱动管理软件
        • 2. 硬编码位置
        • 3. 其他
      • demo示例
        • 等待策略
          • 查找定位元素
            • 自动保存网盘文件
            • THE END.
            相关产品与服务
            验证码
            腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档