源码 baodu_auto_save.py
# -*- 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(10)
elem_static = driver.find_element_by_id("TANGRAM__PSP_4__footerULoginBtn")
elem_static.click()
time.sleep(10)
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(10)
# 将加密分享的文件保存到自己云盘的目录下
# txt_value 二级目录,是txt文件的文件名,需要自己在网盘中提前创建好
def extract(driver, srcurl, srcpwd, txt_value):
driver.get(srcurl)
try:
getpwd = driver.find_element_by_id("neoEB5")
getpwd.send_keys(srcpwd)
getButton = driver.find_element_by_link_text("提取文件")
getButton.click()
time.sleep(5)
# 目前有两种情况
# 一:分享文件是一压缩包
# 二:分享的是一路径
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(3)
# AAAA 保存路径 -- 一级目录
selectdir = driver.find_element_by_xpath("//span[@node-path='/一级目录']")
selectdir.click()
time.sleep(2)
# 二级目录
pp = u"//span[@node-path='/一级目录/"+ txt_value +"']"
selectdir = driver.find_element_by_xpath(pp)
selectdir.click()
time.sleep(2)
enter = driver.find_element_by_link_text("确定")
enter.click()
time.sleep(3)
except NoSuchElementException:
file_name = "no_such_element.png"
driver.get_screenshot_as_file(file_name)
pass
# 从txt中读取分享链接和提取密码(格式 链接#密码 :http://*********.com#vkds)
def read_txt(filepath):
# filepath = unicode(filepath, "utf-8")
file = open(filepath, 'r')
fl = file.readlines()
listUrl = []
listpwd = []
for x in fl:
url_pass = x.strip() # 除去每行的换行符
if url_pass.find('#')> 0:
url_pass_str = url_pass.split('#')
listUrl.append(url_pass_str[0].encode('utf-8'))
listpwd.append(url_pass_str[1].encode('utf-8'))
return listUrl, listpwd
# 列出文件夹下所有的目录与文件
def list_all_files(rootdir):
import os
_files = []
list = os.listdir(rootdir) # 列出文件夹下所有的目录与文件
for i in range(0, len(list)):
path = os.path.join(rootdir, list[i])
if os.path.isdir(path):
_files.extend(list_all_files(path))
if os.path.isfile(path):
_files.append(path)
return _files
# 调用执行
def doWork():
driver = webdriver.Chrome()
login(driver, u"百度网盘帐号", "百度网盘密码")
filepath = 'txt文本路径'
filepath = unicode(filepath, "utf-8")
files = list_all_files(filepath)
for item in files:
txt_value_arr = item.split('\\') # 文本分割,以table键分割
txt_value = txt_value_arr[len(txt_value_arr) - 1].replace('.txt','')
bashPath = r'' + item + ''
listUrl, listpwd = read_txt(bashPath)
for index in range(len(listUrl)):
srcurl = listUrl[index]
srcpwd = listpwd[index]
print srcurl
extract(driver, srcurl, srcpwd, txt_value)
test_aa(txt_value)
driver.quit()
if __name__ == '__main__':
doWork()
注意点:
查看 chrome 版本
通过键入地址查看:打开浏览器,在地址栏输入:
这里我的版本是:69.0.3497.100(正式版本)(32 位)(cohort: Stable)
下载 chromedriver
http://chromedriver.storage.googleapis.com/index.html
按照其对应的 chrome 版本进行下载自己所需要的,我的版本对应的是(百度网盘):
链接:https://pan.baidu.com/s/167pnOj7c6cMUuW-t7_NjlQ 提取码:ak0b
对 chromedriver 的使用
网上很多教程都是说是放到 chrome 的安装路径里面,然后在电脑环境变量中进行设置 path,这个就不说了,需要的自己百度测试。
我这边就是将 chromedriver 直接放到 pycharm 项目根目录和 baodu_auto_save.py 同级,直接运行就行,这个我觉得简单。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于