python代码学习——操作:日期控件和上传文件
- 日期控件的处理
-
- 上传文件
- 获取元素属性
日期控件的处理
- 日期控件的输入框中有一个readonly的属性,导致文本框只读。
- 日期控件如果将选择时间框点击之后,再去选择日期,第一元素不容易定位,第二不太稳定,因此,设置时间时是先更改日期控件文本框的属性,然后直接输入时间,来实现时间的选择
- 代码示例:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time
# 打开一个会话
diver = webdriver.Chrome()
# 全屏
diver.maximize_window()
try:
# 访问百度链接
diver.get("https://www.12306.cn/index/")
WebDriverWait(diver, 20).until(EC.visibility_of_element_located((By.ID, 'fromStationText')))#等待元素出现
diver.execute_script('document.getElementById("train_date").readOnly=false')#修改时间控件的属性
diver.find_element_by_id("train_date").clear()#清空时间控件中的内容
diver.find_element_by_id("train_date").send_keys('2020-10-01')#重新输入数值
diver.find_element_by_id("search-input").click()#点击其他地方,弹框消失
diver.find_element_by_id('search_one').click()#点击查询按钮
time.sleep(10)
diver.quit()
except Exception as e:
diver.quit()
raise e
上传文件
- 如果上传文件的输入框可以输入地址,处理方式和时间控件一样
- 如果只有上传按钮,需要输入文件地址并点击打开按钮,这种方式使用selenium打开不了,使用的是wimdows控件
- 这时候,需要使用python第三方库来进行处理,需要使用python pywin32库,他的作用是事变对话框句柄,进而操作
- python pywin32只能在windows上进行操作
- 处理流程:找元素——操作,路径必须是绝对路径
- 使用工具
- 使用方式如下:WinSpy
python代码学习——操作:日期控件和上传文件日期控件的处理获取元素属性 python代码学习——操作:日期控件和上传文件日期控件的处理获取元素属性 - handle中显示元素
- text中显示文件名
- class为类型
python代码学习——操作:日期控件和上传文件日期控件的处理获取元素属性 - 找的方式:第一步找到自己本身的位置
- 第二步:找到外面的大窗口(打开窗口)——class:#32770
- 定位时可直接点击软件windows中的元素,点击后基本信息中的信息会改变,知道找到父级为#32770的位置
- 文件最终的路径:Edit——ComboBox——ComboBoxEx32——#32770
- 打开按钮:button——#32770
- 代码示例:
import win32gui
import win32con
def upload(filePath,browser_type="chrome"):
if browser_type == "chrome":
title = "打开"
else:
title = ""
#找元素
#一级窗口"#32770","打开"(传参:text和class)
dialog = win32gui.FindWindow("#32770",title)
#
ComboBoxEx32 = win32gui.FindWindowEx(dialog,0,"ComboBoxEx32",None) #二级
#参数:第一个是父对象,
#第二个是0,意思是从第一个子元素开始,一直遍历到最后一个,知道找到为止;数值可以改变,如果数值为3,就是从第四个子元素开始;
#第三个参数是class的 值;第四个的意思是:文本内容
comboBox = win32gui.FindWindowEx(ComboBoxEx32,0,"ComboBox",None) #三级
#编辑按钮
edit = win32gui.FindWindowEx(comboBox,0,'Edit',None) #四级
#打开按钮
button = win32gui.FindWindowEx(dialog,0,'Button',"打开(&O)") #四级
#往编辑当中,输入文件路径 。
win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,filePath) #发送文件路径
#filePath为本地路径
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) #点击打开按钮
upload("D:\\1-课件目录\\server.log")
获取元素属性
- 方法:get_attribute
- 需要传属性值,代码:
driver.find_element_by_id("kw").get_attribute("属性名称")