天天看点

python代码学习——操作:日期控件和上传文件日期控件的处理获取元素属性

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("属性名称")