最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python+selenium的web自動(dòng)化上傳操作的實(shí)現(xiàn)

 更新時(shí)間:2022年08月08日 16:19:55   作者:測試框架師凃九  
這篇文章主要介紹了python+selenium的web自動(dòng)化上傳操作的實(shí)現(xiàn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下

一、關(guān)于上傳操作

上傳有兩種情況:

  • 如果是input可以直接輸入路徑的,那么直接使用send_keys(文件路徑)輸入路徑即可;
  • 非input標(biāo)簽的上傳,則需要借助第三方工具:第三方庫 pywin32、第三方工具pyautogui等等。

那這里針對以上兩種情況分別介紹一下具體的解決方法。

二、input標(biāo)簽

定位到元素,然后直接使用send_keys(文件路徑)輸入路徑,比較簡單。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://xxxx")
driver.maximize_window()
 
# 定位上傳文件元素
input_file = driver.find_element_by_id("xxx")
# 上傳文件
input_file.send_keys(r"D:\learn\xx.txt")

三、第三方庫pywin32

? 非input標(biāo)簽的上傳,則需要借助第三方工具。pywin32就是這樣的一個(gè)第三方庫,主要是方便python開發(fā)者快速調(diào)用windows API的一個(gè)模塊庫,可以識別上傳對話框句柄進(jìn)而操作。

安裝命令:pip install pywin32。

? 從上面的上傳窗口,及WinSpy工具窗口,可以得出控制關(guān)系圖如下:

? 從上圖可以看出:

  • 文件名輸入框的路徑為:上傳窗口 - > comboBoxEx32 - >comboBox - > Edit,在第四級edit;
  • 按鈕的路徑為:上傳窗口 - > button(打開按鈕),在第二級。

? 我們需要一步一步定位,從第一層開始往下去找,找到對應(yīng)的窗口然后進(jìn)行操作,步驟說明如下:

  • ?  第一步:先定位到第一層大窗口(即整個(gè)上傳窗口),使用win32gui模塊下的FindWindow(),它是專門用于查找大窗口的;
  • ?  第二步:在大窗口下查找子窗口,使用win32gui模塊下的FindWindowEx(),查找大窗口以下的子窗口都是用這個(gè)方法;
  • ?  第三步:定位到最后要操作的窗口后,就開始要執(zhí)行編輯、點(diǎn)擊這個(gè)操作了,不管是編輯還是點(diǎn)擊都是使用win32gui模塊下的SendMessage()。

以上三步的相關(guān)函數(shù)說明如下:

  • win32gui.FindWindow(IpClassName,IpWindowName):自頂層窗口開始尋找匹配條件的窗口,并返回這個(gè)窗口的句柄IpClassName:類名,在Spy++里能夠看到IpWindowName:窗口名,標(biāo)題欄上能看到的名字
  • win32gui.FindWindowEx(hwndParent=0,hwndChildAfter=O,IpClassName=None,IpWindowName=None):搜索類名和窗體名匹配的窗體,并返回這個(gè)窗體的句柄,找不到就返回0hwndParent:若不為0,則搜索句柄為hwndParent窗體的子窗體hwndChildAfter:若不為0,則按照z-index的順序從hwndChildAfter向后開始搜索子窗體,否則從第一個(gè)子窗體開始搜索IpClassName:字符型,是窗體的類名,這個(gè)可以在Spy++里能夠看到IpWindowName:字符型,是窗口名,就是標(biāo)題欄上能看到的名字
  • win32gui.SendMessage(hWnd, Msg, wParam, IParam):hWnd:整型,接收消息的窗體句柄Msg:整型,要發(fā)送的消息,這些消息都是windows預(yù)先定義好的wParam:整型,消息的wParam參數(shù)IParam:整型,消息的IParam參數(shù)

? 以下是封裝好的上傳函數(shù),因?yàn)閣indow的上傳窗口是固定不變的,我們只需要封裝好一個(gè)類知道如何去調(diào)用即可,不需要理解它的處理細(xì)節(jié),但如果你有興趣可以深入了解一下。

import win32gui
import win32con
 
# edit - combobox - comboBoxEx32 - #32770  編輯框在第四級
# button - #32770  打開按鈕在第二級
 
# 前提:window上傳窗口已經(jīng)出現(xiàn),最好sleep 1-2秒等待窗口出現(xiàn)
 
def upload(filepath, browser_type="chrome"):
    if browser_type == "chrome":
        title = "打開"
    else:
        title = ""
    # 找元素
    # 從一級開始找,一級窗口“#32770”,“打開”
    dialog = win32gui.FindWindow("#32770", title)  # FindWindow用于找大窗口
 
    # 二級之后都用FindWindowEx,需要四個(gè)參數(shù),
    # 1、元素的父親,2、從第一個(gè)子代開始找元素,3、元素的類型名(class),4、元素的文本值
    comboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)  # 二級
    comBox = win32gui.FindWindowEx(comboBoxEx32, 0, "ComboBox", None)  # 三級
    # 編輯框
    edit = win32gui.FindWindowEx(comBox, 0, 'Edit', None)  # 四級
    # 打開按鈕
    button = win32gui.FindWindowEx(dialog, 0, 'Button', '打開(&0)')  # 二級
 
    # 往編輯框輸入文件路徑
    win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)  # 發(fā)送文件路徑
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 點(diǎn)擊打開按鈕
if __name__ == '__main__':
    upload('D:\\test.txt')

四、第三方工具pyautogui

? 還有一種更方便的方法,就是借助第三方工具pyautogui,pyautogui是一個(gè)純Python的GUI自動(dòng)化工具,其目的是可以用程序自動(dòng)控制鼠標(biāo)和鍵盤操作,并且支持多平臺(tái)(Windows,OS X,Linux)。強(qiáng)烈推薦!

下面以舉例的html為例,需要先把該代碼保存成html文件,后續(xù)直接訪問這個(gè)本地html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1> hello world </h1>
<input type="file" name="mfile">
</body>
</html>

安裝模塊: pip install pyautogui,

操作只需要兩步:

  • 第一步:將要上傳的文件路徑寫入到文件名的輸入框內(nèi);
  • 第二步:敲回車,相當(dāng)于點(diǎn)擊【打開】按鈕,注意回車presses要2次才能生效。
import os
import time
import pyautogui as ui
from selenium import webdriver
 
driver = webdriver.Chrome()
driver.implicitly_wait(20)      # 隱式等待
dir = os.getcwd()
html_dir = os.path.join(dir, 'demo.html')
driver.get(html_dir)
 
file_elem = driver.find_element_by_name('mfile')
file_elem.click()
 
# 系統(tǒng)之間要等待
time.sleep(1)
file_dir = os.path.join(dir, 'test.txt')	# 要上傳的文件路徑
# 寫入文件
ui.write(file_dir)	# 直接調(diào)用寫入
time.sleep(0.5)
# 輸入回車鍵, presses表示按的次數(shù),按一次不會(huì)生效,有可能是執(zhí)行太快,建議presses=2
ui.press('enter', presses=2)
time.sleep(2)
driver.quit()

? 不管是使用哪種上傳方式,只要是操作系統(tǒng)的上傳窗口,操作之前記得先等待一下。

總結(jié)

今天的文章就到這里了喲,需要獲得下面福利的小伙伴可以私信我關(guān)鍵字“資料”獲取喲。

項(xiàng)目實(shí)戰(zhàn)

app項(xiàng)目,銀行項(xiàng)目,醫(yī)藥項(xiàng)目,電商,金融

大型電商項(xiàng)目

全套軟件測試自動(dòng)化測試教學(xué)視頻

300G教程資料下載【視頻教程+PPT+項(xiàng)目源碼】

全套軟件測試自動(dòng)化測試大廠面經(jīng)

python自動(dòng)化測試++全套模板+性能測試

到此這篇關(guān)于python+selenium的web自動(dòng)化上傳操作的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python自動(dòng)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于python導(dǎo)入模塊import與常見的模塊詳解

    關(guān)于python導(dǎo)入模塊import與常見的模塊詳解

    今天小編就為大家分享一篇關(guān)于python導(dǎo)入模塊import與常見的模塊詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 一文詳解Python中的Map,Filter和Reduce函數(shù)

    一文詳解Python中的Map,Filter和Reduce函數(shù)

    這篇文章主要介紹了一文詳解Python中的Map,Filter和Reduce函數(shù),本文重點(diǎn)介紹Python中的三個(gè)特殊函數(shù)Map,Filter和Reduce,以及如何使用它們進(jìn)行代碼編程
    2022-08-08
  • Jmeter中JSR223設(shè)置變量方式

    Jmeter中JSR223設(shè)置變量方式

    本文主要介紹了JMeter的幾種常用變量設(shè)置方式,特別對JSR223設(shè)置變量進(jìn)行了詳細(xì)解釋,JSR223是Java規(guī)范請求,可以向Java平臺(tái)增添新的API和服務(wù),JSR223Sampler可以使用JSR223腳本代碼執(zhí)行創(chuàng)建/更新變量所需的示例或一些計(jì)算
    2024-10-10
  • python中functools.lru_cache的具體使用

    python中functools.lru_cache的具體使用

    本文主要介紹了python中functools.lru_cache的具體使用,通過functools.lru_cache,你可以輕松優(yōu)化具有重復(fù)計(jì)算的函數(shù),大大提高代碼的執(zhí)行效率
    2024-09-09
  • Python處理不同接口間參數(shù)依賴的方法總結(jié)

    Python處理不同接口間參數(shù)依賴的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫接口自動(dòng)化測試,以有效地處理不同接口之間的參數(shù)依賴,并提供豐富的示例代碼,希望對大家有所幫助
    2024-01-01
  • matplotlib繪制餅圖的基本配置(萬能模板案例)

    matplotlib繪制餅圖的基本配置(萬能模板案例)

    餅圖是常見的一種圖表形式,本文主要介紹了matplotlib繪制餅圖的基本配置(萬能模板案例),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • python開發(fā)之IDEL(Python GUI)的使用方法圖文詳解

    python開發(fā)之IDEL(Python GUI)的使用方法圖文詳解

    這篇文章主要介紹了python開發(fā)之IDEL(Python GUI)的使用方法,結(jié)合圖文形式較為詳細(xì)的分析總結(jié)了Python GUI的具體使用方法,需要的朋友可以參考下
    2015-11-11
  • Pytorch-mlu?實(shí)現(xiàn)添加逐層算子方法詳解

    Pytorch-mlu?實(shí)現(xiàn)添加逐層算子方法詳解

    本文主要分享了在寒武紀(jì)設(shè)備上?pytorch-mlu?中添加逐層算子的方法教程,代碼具有一定學(xué)習(xí)價(jià)值,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Python實(shí)現(xiàn)HTTP協(xié)議下的文件下載方法總結(jié)

    Python實(shí)現(xiàn)HTTP協(xié)議下的文件下載方法總結(jié)

    這篇文章主要介紹了Python實(shí)現(xiàn)HTTP協(xié)議下的文件下載方法總結(jié),包括端點(diǎn)續(xù)傳下載等功能,需要的朋友可以參考下
    2016-04-04
  • python 格式化輸出百分號的方法

    python 格式化輸出百分號的方法

    今天小編就為大家分享一篇python 格式化輸出百分號的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評論

织金县| 金塔县| 麻江县| 红安县| 茌平县| 铜鼓县| 静宁县| 卓尼县| 库尔勒市| 胶州市| 东山县| 潞西市| 资阳市| 新密市| 厦门市| 太仓市| 迁安市| 黔西| 临夏县| 康定县| 凤台县| 忻州市| 南华县| 利津县| 阿合奇县| 阳江市| 清苑县| 水富县| 寻乌县| 洱源县| 绍兴市| 民乐县| 成都市| 英吉沙县| 宜都市| 石柱| 浙江省| 开平市| 沙河市| 嫩江县| 昭通市|