無需手動操作:利用 Playwright 自動上傳文件

前言

Playwright 是一個由 Microsoft 開發的自動化測試工具,它提供了跨瀏覽器的自動化測試能力,包括 Chrome、Firefox 和 Safari。除了測試之外,Playwright 還可以用於執行瀏覽器操作,例如模擬用戶行爲來實現文件上傳功能。在本文中,我們將使用 Playwright 和 Python 實現自動上傳文件的功能,這對於那些需要大量上傳文件的應用程序來說尤爲實用。

文件上傳

playwright提供了locator.set_input_files()方法選擇要上傳的輸入文件,它期望第一個參數指向 <input > 的輸入元素"file",數組中可以傳遞多個文件,如果某些文件路徑是相對的,則它們將相對於當前工作目錄進行解析。空數組清除所選文件。

# 選擇一個文件
page.get_by_label("Upload file").set_input_files('myfile.pdf')

# 選擇多個文件
page.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])

# 移除所有文件
page.get_by_label("Upload file").set_input_files([])

如果沒有輸入元素(它是動態創建的),可以使用 page.on("filechooser") 事件或在您的操作中使用相應的等待方法:

with page.expect_file_chooser() as fc_info:
    page.get_by_label("Upload file").click()
file_chooser = fc_info.value
file_chooser.set_files("myfile.pdf")

相關操作:

  • file_chooser.element 返回與此文件選擇器關聯的輸入元素
  • file_chooser.is_multiple() 返回此文件選擇器是否接受多個文件
  • file_chooser.page 返回此文件選擇器所屬的頁面

設置與此選擇器關聯的文件輸入的值。如果其中一些filePaths是相對路徑,那麼它們將相對於當前工作目錄進行解析。對於空數組,清除所選文件

file_chooser.set_files(files)
file_chooser.set_files(files, **kwargs)

相關參數

  • files pathlib.Path
  • no_wait_after 啓動導航的操作正在等待這些導航發生並等待頁面開始加載。您可以通過設置此標誌來選擇退出等待。您僅在特殊情況下才需要此選項,例如導航到無法訪問的頁面。默認爲false.
  • timeout 以毫秒爲單位的最長時間,默認爲 30 秒,傳遞0以禁用超時,可以使用browser_context.set_default_timeout()page.set_default_timeout()方法更改默認值

實例

下面我們分情況來介紹playwright上傳文件的方法。

  1. input 輸入框,並且類型是type="file",如下圖所示:

我們可以直接定位輸入框,用set_input_files('myfile.pdf') 方法上傳文件路徑,類似於selenium的send_keys('文件路徑.xx')

    page.goto("*****l")

    page.get_by_label("文件名稱").fill("xxxx")
    # 不點開文件框的情況下
    page.get_by_label("選擇文件").set_input_files('xxx.png')
  1. 不是input輸入框,必須點開文件框的情況(selenium上沒法實現的操作)

可以使用page.expect_file_chooser() 監聽到彈出框,在彈出框上輸入文件路徑,代碼如下:

with page.expect_file_chooser() as fc_info:
        page.get_by_label("選擇文件").click()
    page.pause()
    file_chooser = fc_info.value
    file_chooser.set_files(path)

在運行過程中你是感知不到文件選項框彈出來的

異步代碼示例:

async with page.expect_file_chooser() as fc_info:
    await page.get_by_text("Upload file").click()
file_chooser = await fc_info.value
await file_chooser.set_files("myfile.txt")

總結

使用 Playwright 和 Python 可以輕鬆實現文件自動上傳功能,這對於需要大量上傳文件的應用程序來說是非常實用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章