技术小白自动化测试实践(1)-下载某平台文档

某付费平台文档可以阅读,但是不能复制,发现只要去除div,就能进行鼠标右击复制。但是手动操作太慢,现在利用selenium驱动浏览器做一下自动下载工具。

from selenium import webdriver
from selenium.webdriver import ActionChains
import time
import win32api
import win32con
import docx
from docx.shared import Inches
from PIL import ImageGrab
import os

引入包分别有selenium ,可以进行浏览器驱动,模拟鼠标操作。win32api
和win32con可以模拟键盘输入,docx进行文档写入,docx的Inches可以将添加的图片文档进行大小裁定,PIL进行图片处理。os文件目录操作。

input_url = raw_input("please input pid:")
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http:...p-%s.html" % input_url)
time.sleep(10)

驱动浏览器访问文档地址,time等待是为了文档加载完成。

   browser.execute_script("var elements = document.getElementsByClassName('page_pb');\
    while(elements.length > 0){elements[0].parentNode.removeChild(elements[0])}")
    time.sleep(1)

# 去除所有遮挡div标签,selenium调用js方法
current_time = time.strftime("%Y-%m-%d-%H-%M", time.localtime(time.time()))
p = docx.Document(docx=os.path.join(os.getcwd(), 'default.docx'))
p.save("D:\\test\\%s.docx" % current_time)
# 先创建文档
#参考https://www.jianshu.com/p/94ac13f6633e
div_date = browser.find_element_by_id("page_%s" % j)
browser.execute_script("arguments[0].scrollIntoView();", div_date)
time.sleep(3)
# 滚动加载处理,由于需要定位到当前页才能数据加载,等待3S
ActionChains(browser).context_click(div_date).click().perform()
win32api.keybd_event(89, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(2)
# 右击并且模拟键盘y,将内容图片复制进系统粘贴板
image = ImageGrab.grabclipboard()
image.save("D:\\test\\" + str(input_url) + str(j) + ".png", "PNG")
p = docx.Document("D:\\test\\%s.docx" % current_time)
p.add_picture("D:\\test\\" + str(input_url) + str(j) + ".png", width=Inches(6), height=Inches(8))
p.save("D:\\test\\%s.docx" % current_time)
selenium模拟页面滚动,先进行元素定位,然后用execute_script模拟滚动到该元素。

模拟鼠标右击后,无法直接将右击出的副菜单进行定位,可以用键盘输入进行操作副菜单,模拟输入字母”Y”,将内容复制进系统的剪贴板。ImageGrab.grabclipboard()获取到的图片为”RGB“类型,如果系统剪贴板没有图片,则返回的是空值。
看下下载结果:

技术小白自动化测试实践(1)-下载某平台文档_第1张图片

技术小白自动化测试实践(1)-下载某平台文档_第2张图片
形成一份下载文档,单个内容图片也进行了保存。
发现该平台的下载漏洞后,联系了客服,最近看了下,发现去除div后不能再进行复制,后面有时间进行改进,看能否有其他方法破解。自动化测试有很多应用的方面,有了好点子去执行,就有收获。

你可能感兴趣的:(自动化)