应用场景:以某种方式(比如从某宝买)得到一些资源的链接,是存放在一个Excel里边的。想要把所有链接指向的资源都下载下来。
解决方案:1.所有资源保存到自己的云盘目录下;2.统一下载。
那么问题来了,如果有成百上千条的链接,要手动去点击,那就很伤眼睛了不是?于是笔者想到写一个自动去保存的代码来实现。
就目前笔者的知识技能储备,可以想到Python Selenium自动化测试的一些方法。具体代码如下:
# -*- coding: UTF-8 -*-
import xlrd
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
# 凡是出现sleep的,都是因为网络等原因加载过慢,需要等一等
# 登录云盘
def login(driver,username,password):
orgin_url = 'https://pan.baidu.com/'
driver.get(orgin_url)
time.sleep(5)
elem_static = driver.find_element_by_id("TANGRAM__PSP_4__footerULoginBtn")
elem_static.click()
time.sleep(0.5)
elem_username = driver.find_element_by_id("TANGRAM__PSP_4__userName")
elem_username.clear()
elem_username.send_keys(username)
elem_userpas = driver.find_element_by_id("TANGRAM__PSP_4__password")
elem_userpas.clear()
elem_userpas.send_keys(password)
elem_submit = driver.find_element_by_id("TANGRAM__PSP_4__submit")
elem_submit.click()
time.sleep(5)
# 将加密分享的文件保存到自己云盘的目录下[AA]
def extract(driver,srcurl,srcpwd):
driver.get(srcurl)
try:
getpwd = driver.find_element_by_id("esDEV5")
getpwd.send_keys(srcpwd)
getButton = driver.find_element_by_link_text("提取文件")
getButton.click()
time.sleep(10)
# 目前有两种情况
# 一:分享文件是一压缩包
# 二:分享的是一路径
try:
# 全选(情况二)
selectall = driver.find_element_by_class_name("zbyDdwb")
selectall.click()
except NoSuchElementException:
file_name = "no_zbyDdwb.png"
driver.save_screenshot(file_name)
driver.get_screenshot_as_file(file_name)
pass
savetodisk = driver.find_element_by_link_text("保存到网盘")
savetodisk.click()
time.sleep(5)
# AA 保存路径
selectdir = driver.find_element_by_xpath("//span[@node-path='/AA']")
selectdir.click()
enter = driver.find_element_by_link_text("确定")
enter.click()
time.sleep(2)
except NoSuchElementException:
file_name = "no_such_element.png"
driver.get_screenshot_as_file(file_name)
pass
# 从Excel中读取分享链接和提取密码(默认第一列是链接、第二列是提取密码)
def read_excel(path):
workbook = xlrd.open_workbook(path)
sheet0=workbook.sheet_by_index(0);
listUrl=[]
listpwd=[]
rownum=sheet0.nrows
for index in range(rownum):
listUrl.append(sheet0.cell(index,0).value.encode('utf-8'))
listpwd.append(sheet0.cell(index,1).value.encode('utf-8'))
return listUrl,listpwd
# 调用执行
def doWork():
# 存放链接的文件
path=r'C:\filetmp\demo.xlsx'
listUrl,listpwd= read_excel(path)
driver = webdriver.Chrome()
login(driver,"你的云盘账号","密码")
for index in range(len(listUrl)):
srcurl=listUrl[index]
srcpwd=listpwd[index]
extract(driver,srcurl,srcpwd)
driver.quit()
if __name__ == '__main__':
doWork()