在web页面中,可以使用selenium的定位方式来识别元素,从而来实现页面中的自动化,但对于页面中弹出的文件选择框,selenium就实现不了了,所以就需引用AutoIt工具来实现。
AutoIt的下载与安装就不再赘述,下载地址如下:https://www.autoitscript.com/site/autoit/downloads/
这是安装好的目录
接下来就用一个实例来讲解下AutoIt工具的具体使用,实例功能是:把百度首页中的百度图片另存为到本地
那就开始吧
1、首先定位图片然后鼠标右击 (要是觉得陌生,那要再回去看看selenium了)
action = driver.find_element_by_class_name("index-logo-src")
ActionChains(driver).context_click(action).perform()
2、用win32api选择相应菜单并点击
a = 0 while a < 7: win32api.keybd_event(40, 0, 0, 0) time.sleep(1) a += 1 win32api.keybd_event(13, 0, 0, 0)
上面代码的13与40按键对应的是回车与下键
运行到这一步后会弹出如下对话框,让输入文件名以及保存路径,该对话框已经是页面外的元素了,使用普通的定位时定不到了,所以就需要使用AutoIt工具来实现。
3、用AutoIt实现另存为操作
鼠标点中Finder Tool并拖动到输入文件名处,操作如下所示,得到下图结果
元素定位到了,接下来就是使用AutoIt工具包下的SciTE Script Editor写脚本,并保存为au3格式,根据定位到的参数值,写如下脚本:
ControlFocus("另存为","","Edit1")
WinWait("[CLASS:#32770]","",10)
ControlSetText("另存为","", "Edit1", "d:\Test\baidu.png")
Sleep(2000)
ControlClick("另存为","","Button2")
代码解释:
第一行:ControlFocus ( "title", "窗口文本", controlID) 设置输入焦点到指定窗口的某个控件上;
第二行:WinWait ( "title" , "窗口文本" , 超时时间 ) 暂停脚本的执行直至指定窗口存在(出现) 为止;
第三行:ControlSetText ( "title", "窗口文本", controlID, "新文本" ) 修改指定控件的文本;
第四行:Sleep ( 延迟 ) 使脚本暂停指定时间段;
第五行:ControlClick ( "title", "窗口文本", 控件ID , 按钮 , 点击次数 ) 向指定控件发送鼠标点击命令;
其中, title即AutoIt Window Info识别出的Title字段, controlID即AutoItWindow Info识别出的Class和Instance的拼接, 如上图拼接后的结果应为:Button2,也就是ClassnameNN的值。
使用AutoIT工具包下的Complie Script to .exe工具把刚编写的脚本编译成可执行文件,操作如下:
4、到Python代码中调用该可执行文件
import os
os.system("D:\\Test\\保存脚本.exe")
至此大功告成
附上源代码
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import win32api, time
import os
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
action = driver.find_element_by_class_name("index-logo-src")
ActionChains(driver).context_click(action).perform()
a = 0
while a < 7:
win32api.keybd_event(40, 0, 0, 0)
time.sleep(1)
a += 1
win32api.keybd_event(13, 0, 0, 0)
time.sleep(1)
os.system("D:\\Test\\保存脚本.exe")
time.sleep(3)
driver.quit()