写点什么

自动化下载文件(IE 浏览器)

发布于: 2021 年 05 月 13 日

但凡有其他方案我是不会使用 IE 浏览器的,今天给大家介绍的是在 IE 浏览器上的文件自动下载的实现方式。

不使用 POST 和 GET 的方式请求,而是模拟人类操作。

核心代码块

废话先不多说,先把核心代码给大家,如果你也需要的话,可以直接拿去参考

import comtypesfrom comtypes import CoCreateInstanceimport comtypes.clientfrom comtypes.gen.UIAutomationClient import *

uia = Noneroot_element = Nonedef uia_init(): global uia global root_element uia = CoCreateInstance(CUIAutomation._reg_clsid_, interface=IUIAutomation, clsctx=comtypes.CLSCTX_INPROC_SERVER) root_element = uia.GetRootElement()
def get_window_element(title): """ titleに指定したウィンドウのAutomationElement を取得する デスクトップ上でtitleが重複している場合、最初に見つかったものを返す """ win_element = root_element.FindFirst(TreeScope_Children, uia.CreatePropertyCondition( UIA_NamePropertyId, title)) return win_element def find_save_control(base_element): condition = uia.CreatePropertyCondition(UIA_NamePropertyId, "保存") ctl_elements = base_element.FindAll(TreeScope_Subtree, condition) return [ ctl_elements.GetElement(i) for i in range(ctl_elements.Length) ]
def click_button(element): """ 指定したelement をIUIAutomationInvokePattern.Invoke() でクリックする 指定したelementのIsInvokePatternAvailableプロパティがFalseの場合何もしない """ isClickable = element.GetCurrentPropertyValue(UIA_IsInvokePatternAvailablePropertyId) if isClickable == True: ptn = element.GetCurrentPattern(UIA_InvokePatternId) ptn.QueryInterface(IUIAutomationInvokePattern).Invoke()
复制代码

这里主要用用到了 comtypes 库

comtypes 这个是 Python 的标准库,不需要额外安装。

代码的调用

def save_file(ie_title):    while True:        uia_init()        win = get_window_element(f"{ie_title} - Internet Explorer")                   btns = find_save_control(win)        if btns:            time.sleep(1)            click_button(btns[0])             break      time.sleep(3)    link_tag = driver.find_element_by_partial_link_text("文件下载")link_js = link_tag.get_attribute("onclick")print(link_js)driver.execute_script(link_js)save_file(driver.title)
复制代码

由于网络速度的影响,我们点击了页面上的下载按钮后,可能不会立刻出现下载的提示框,因此我这里用了一个死循环,直到我们成功的点击到了保存按钮后。

这里有个弊端,可能会导致程序一直死循环,感兴趣的小伙伴可以考虑使用 retry 这个库代替死循环。

我们这里使用的是 seleuinm 框架,来实现点击下载链接的。


发布于: 2021 年 05 月 13 日阅读数: 17
用户头像

一个日语专业的程序猿。 2017.09.10 加入

【坐标】无锡 【软件技能】Java,C#,Python 【爱好】炉石传说 【称号】InfoQ年度人气作者,Intel OpenVINO领航者联盟成员 【B站】https://space.bilibili.com/397260706/ 【个人站】www.it-worker.club

评论

发布
暂无评论
自动化下载文件(IE浏览器)