写在前面的声明:

  作为一个正在自学爬虫的小白,用爬虫爬了八千本书的云盘链接,然后就想把这写链接的资源都转存到自己的云盘里,以防某一天资源失效。本来想在网上找个能够批量保存的软件,哪知道找到几个都不能用,用手动保存肯定是不现实的。随后想到才学的selenium能够模拟浏览器的操作,就像自己写段自动保存的代码。经过三四个小时的奋战,有了以下的结果。我知道自己这个东西写得很烂很烂,但这确实是我学习路上用已有的知识独立思考独立操作出的成果,毕竟它解决了我实际遇到的问题,这完全符合我当初自学编程的初衷,心里还是很高兴的。现在把代码贴出来,让各位大神老师见笑了,也是为了如果有哪位大神有类似的更好的工具,希望能够分享一下。

from selenium import webdriver
import time with open("books.txt") as f:
links = f.readlines() # 从文件中读取资源链接和密码
browser = webdriver.Chrome() # 实例一个浏览器对象
expired = [] # 创建一个存储过期链接的列表
for link in links: # 遍历
url = link.split("----")[0] # 以----为分隔符,前半段为地址,后半段为密码
pw = link.split("----")[1]
browser.get(url) # 请求资源链接
time.sleep(2)
if browser.page_source.find("zvbpPbMk") != -1: # 判断链接是否有效
browser.find_element_by_id("zvbpPbMk").send_keys(pw) # 输入密码
browser.find_element_by_class_name("text").click() # 点击确定
time.sleep(2)
if browser.page_source.find("user-name") != -1:
print("正在保存 " + browser.find_element_by_xpath("//h2").text)
browser.find_element_by_class_name("zbyDdwb").click() # 点选文件
browser.find_element_by_xpath('//a[@class="g-button g-button-blue"]/span[@class="g-button-right"]/span[@class="text"]').click() # 点击保存到网盘按钮
time.sleep(3)
browser.find_element_by_xpath("//div[@class='dialog-footer g-clearfix']/a[2]").click() # 点击确定
time.sleep(2)
print("保存成功 " + browser.find_element_by_xpath("//h2").text)
else:
print("正在保存 " + browser.find_element_by_xpath("//h2").text)
browser.find_element_by_xpath("//dd[@class='CDaavKb']/a[1]").click() # 点击登陆按钮
time.sleep(3)
browser.find_element_by_xpath("//div[@class='tang-pass-footerBar']/p[2]").click() # 点击账号密码登陆按钮
time.sleep(3)
browser.find_element_by_name("userName").send_keys("") # 输入账号
browser.find_element_by_name("password").send_keys("xvv19890224") # 输入密码
browser.find_element_by_id("TANGRAM__PSP_10__submit").click() # 点击确定
time.sleep(3)
browser.find_element_by_class_name("zbyDdwb").click() # 点选文件
browser.find_element_by_xpath('//a[@class="g-button g-button-blue"]/span[@class="g-button-right"]/span[@class="text"]').click() # 点击保存到网盘按钮
time.sleep(3)
browser.find_element_by_xpath("//div[@class='dialog-footer g-clearfix']/a[2]").click() # 点击确定
time.sleep(2)
print("保存成功 " + browser.find_element_by_xpath("//h2").text)
else:
# 把过期的链接添加到列表
expired.append(url)
# 打印过期的链接列表
print(expired)

批量保存云盘链接的demo的更多相关文章

  1. 手把手教你Chrome浏览器安装Postman(含下载云盘链接)【转载】

    转载自:http://www.ljwit.com/archives/php/278.html 说明: Postman不多介绍,是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.本文主要 ...

  2. 手把手教你Chrome浏览器安装Postman(含下载云盘链接)(转)

    文章转自http://www.ljwit.com/archives/php/278.html 说明: Postman不多介绍,是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.本文主要 ...

  3. .NET DLL 保护措施应用实例(百度云批量保存工具)

    最近做了个小工具,将保护措施思路全部应用到了此工具中. 点我下载   百度云批量保存工具是一款专门用于自动批量保存百度云分享的软件. 本软件特点:1:完全模拟人工操作:2:可以批量保存百度分享的文件( ...

  4. 使用Python玩转阿里云盘

    项目地址: https://github.com/foyoux/aligo 这个项目起源于我的一个简单需求, 我有25000个文件, 已经上传了9000个, 但是现在我把这些文件重新整理了, 最后我不 ...

  5. 使用NextCloud搭建私有网络云盘并支持Office文档在线预览编辑以及文件同步

    转载自:https://www.bilibili.com/read/cv16835328?spm_id_from=333.999.0.0 0x00 前言简述 描述:由于个人家里的NAS以及公司团队对私 ...

  6. 哭瞎!360云盘将关停,你的几十T照片和文件该怎么办

    IDO老徐刚得到了一个非常不开心的消息,360云盘将停止个人云盘服务...进行业务转型,在网盘存储.传播内容的合法性和安全性得到彻底解决之前不再考虑恢复,之后转型企业云服务. 而且之前共享的所有资料, ...

  7. 极客DIY:使用树莓派制作一套“NAS+私有云盘+下载机”

    原创作者:HackLiu 0×00 前言 ‍ ‍ 如果你家里有多台设备需要联网需要娱乐,你一定会或多或少遇到设备碎片化带来的烦恼.当然,已经有很多厂商包括新晋的小米.360在内的互联网公司做了这个事情 ...

  8. 18年10月份最新免费申请微软OneDrive5TB云盘超详细教程!(已亲测!)

    本人已于今天10月23日亲测,成功获取微软OneDrive5T云盘! 第一步:.打开申请链接学生版:https://signup.microsoft.com/signup?sku=student教师版 ...

  9. Nextcloud13私有云盘安装指南

    一.环境说明: ※操作系统版本CentOS 7.5 Minimal-1804 ※操作系统版本已经使用163 YUM源 ※ Nextcloud版本 13.05 ※ 数据库使用MariaDB,安装在同一台 ...

随机推荐

  1. Codeforces 161C(分治、性质)

    要点 因为当前最大字符只有一个且两边是回文的,所以如果答案包含最大字符则一定是重合部分. 若不包含,则用此字符将两个区间分别断为两部分,则共有四种组合,答案一定为其中之一. #include < ...

  2. QDU-GZS and String

    Description GZS has two strings s and t. In each step, GZS can select arbitrary character c of s and ...

  3. mirror与repository的关系

    mirror与repository的关系 mirror管理的两个repository的关系,本来是访问repoA, 但是repoB mirrorOf repoA, 就会去repoB上去找. https ...

  4. sql-monitore 的bug 。

    http://www.mamicode.com/info-detail-1659243.html 存储过程无法做 sql -monitor , 而存储过程跑的sql (只能通过awr 报告来看sql_ ...

  5. c++笔记1

    using namespace std:命名空间可以保证一些命名能够在全局不冲突.如用户可以通过声明命名空间,然后用运算符::区别同名的不同变量 using namespace std;namespa ...

  6. ASPCTJ

    ublic interface ISomeService { public void doSome(); public String dade(); } public class SomeServic ...

  7. nodejs 实践:express 最佳实践(三) express 解析

    nodejs 实践:express 最佳实践(三) express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固, ...

  8. Python定时任务sched(一)

    这里介绍一下python中定时任务:sched python中自带的是sched,也可以通过pip下载schedule进行任务定时处理,这里先简单介绍下sched的使用 import datetime ...

  9. JS和jquery获取各种屏幕的宽度和高度的代码

    Javascript: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document ...

  10. CSS布局技巧之——各种居中

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...