selenium之上传文件,日期控件操作
selenium之上传文件,日期控件操作
- 上传文件操作
- 日期控件操作
详解上传文件操作(2种操作场景)
- input标签–>可以直接输入路径,直接调用send_keys输入路径
- 非input标签,借助第三方工具
- SendKeys第三方库(目前只支持python2.7版本) 网址:https:///pypi.python.org/pypi/SendKeys
- Python pywin32库,识别对话框句柄,进而操作
使用pywin32库的方式:工具-> pywin32,WinSpy- pywin32在线安装:(3种方法)
- pip install pypiwin32
- python -m pip install pypiwin32
- pip install pywin32
- WinSpy安装(是.exe文件,直接下载安装,WinSpy是元素识别)
- 工具下载地址:链接:https://pan.baidu.com/s/1cHdNHW 密码:56bp
- WinSpy工具为识别windos控件的工具,需要一层一层往里面找到要操作的文件输入框和打开按钮
- 前提:上传文件的window窗口已经打开
一级窗口:祖先级别元素
文件名窗口:路径输入文本(四级窗口)
文件名窗口的父级元素:(三级窗口-三级元素)
三级窗口的属性显示:
三级窗口的父级元素:(二级窗口–二级元素)
二级窗口的属性显示:
二级窗口的父级元素:(一级,如图一)
四级窗口:打开按钮
打开按钮的父级显示:
- pywin32在线安装:(3种方法)
- 部分代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26import win32gui
import win32con
def file_upload(filePath,browser_type='chrome'):
if browser_type == 'chrome':
title = '打开'
else:
title = ''
# 找元素--->路径的输入文本框
# 一级元素 一级窗口 class = "#32770", title="打开"
dialog = win32gui.FindWindow("#32770",title)
# 二级元素 二级窗口 class='ComboBoxEx32',text=None
ComboBoxEx32 = win32gui.FindWindowEx(dialog,0,'ComboBoxEx32',None)
# 三级元素 三级窗口 class='ComboBox',text=None
comboBox = win32gui.FindWindowEx(ComboBoxEx32,0,'ComboBox',None)
# 四级元素 四级窗口 class='',text=None
edit = win32gui.FindWindowEx(comboBox,0,'Edit',None) # 编辑按钮
# 打开的按钮
button = win32gui.FindWindowEx(dialog,0,'Button',"打开(&O)")
# 往编辑当中,输入文件路径 。
win32gui.SendMessage (edit, win32con.WM_SETTEXT, None, filePath) # 发送文件路径
win32gui.SendMessage (dialog, win32con.WM_COMMAND, 1, button) # 点击打开按钮
if __name__ == '__main__':
file_upload("D:\\111.png")
详解日期控件操作
日历控件的使用场景:- 可以直接输入日期
直接使用send_keys()方法输入日期即可 - 不能够直接输入日期,只能够选择
基本思路:利用js去掉readonly属性,直接输入时间- 使用js代码获取当前这个元素
- 设置readonly属性值为false
- 再修改这个元素的value值
- 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42方法一:
# 去掉只读
js_pha = "document.getElementById('train_date').readOnly=false;"
driver.execute_script(js_pha)
# 清空原来的内容并写入新的内容
driver.find_element_by_id('train_date').clear()
driver.find_element_by_id('train_date').send_keys('2019-07-07')
方法二:
# 去掉只读
js_pha = "document.getElementById('train_date').readOnly=false;"
driver.execute_script(js_pha)
# 直接通过js语句来修改日期
driver.execute_script("document.getElementById('train_date').value=2019-07-07")
方法三:
js_pha = "var a = document.getElementById('train_date');" \
"a.readOnly = false;" \
"a.value = '2019-07-01'"
driver.execute_script(js_pha)
操作12306选择日期的操作
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(20)
driver.get('https://www.12306.cn/')
sleep(5)
driver.find_element_by_xpath("//input[@id='fromStationText']").click()
driver.find_element_by_xpath("//input[@id='fromStationText']").send_keys('武汉',Keys.ENTER)
driver.find_element_by_xpath("//input[@id='toStationText']").click()
driver.find_element_by_xpath("//input[@id='toStationText']").send_keys('深圳',Keys.ENTER)
# 执行js
js_pha = "var a = document.getElementById('train_date');"\
'a.readOnly = false;'\
'a.value = "2019-07-02";'
driver.execute_script(js_pha)
driver.find_element_by_xpath("//a[@id='search_one']").click()
- 可以直接输入日期
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 筱茗辰!