天天看點

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("屬性名稱")