成功属于有准备的人
腾讯文档使用selenium方法点击下载,早前写的,现下网页格局可能有所改变。
代码基本都有注释。
那时刚入坑不久,代码不好看还望见谅。
from bs4 import BeautifulSoup
from selenium import webdriver
import traceback
import time
import numpy
from selenium.webdriver.common.action_chains import ActionChains
# 登录网站
driver = webdriver.Chrome()
driver.get('https://docs.qq.com/desktop/templates-list.html?padtype=0&_wv=2&_wwv=512')
time.sleep(3)
# 自动点击登录
ActionChains(driver).move_by_offset(508, 422).click().perform()
time.sleep(2)
# 格式化的获取页面代码
data = driver.page_source
# driver.minimize_window() # 将窗口置为最小化,暂时实现不了,click不到东西
# 循环队列
a = numpy.arange(0, 201, 1)
# 循环参数
i = 73
# 超时参数
b = 0
# 循环点击各个模板
while i in a:
time.sleep(1)
dianji = driver.find_elements_by_class_name("sub")
print(i)
# 获取当前网址,以供判断
url1 = driver.current_url
time.sleep(0.5)
dianji[i].click()
time.sleep(1)
# 等待加载
data1 = driver.page_source
# 再次获取网址,以供判断
url2 = driver.current_url
# 判断是否超时
if url1 != url2:
# 判断是否需要VIP
try:
# 点击
button1 = driver.find_element_by_id("main-menu-file")
button1.click()
time.sleep(0.5)
# 点击
button2 = driver.find_element_by_xpath("//li[text()='导出为']")
button2.click()
time.sleep(0.5)
# 点击
button3 = driver.find_element_by_xpath("//li[text()='本地Word文档(.docx)']")
button3.click()
time.sleep(2)
# 返回上一页
print("下载成功")
except Exception as e: # 得到未知错误时输出e
print("需要VIP")
# 返回上一界面
driver.back()
# 参数相加
i = i + 1
else:
# b参数阈值可以自行设置,合理即可
if b <= 10:
print("超时")
time.sleep(1)
b = b + 1
else:
# 腾讯文档可能出错,点击文件时一直显示超时(例如73号),避免程序无限循环所作判断
print("同以文件超时过多次,文件可能出现问题,执行下一文件")
b = 0
i = i + 1
# 退出
driver.quit()