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

Python使用DrissionPage實現(xiàn)上傳文件的實戰(zhàn)指南

 更新時間:2026年01月09日 08:16:11   作者:detayun  
在自動化測試和網(wǎng)頁爬蟲開發(fā)中,文件上傳是一個常見需求,本文將詳細介紹如何使用Python的DrissionPage庫實現(xiàn)高效穩(wěn)定的文件上傳操作,有需要的可以了解下

在自動化測試和網(wǎng)頁爬蟲開發(fā)中,文件上傳是一個常見需求。本文將詳細介紹如何使用Python的DrissionPage庫實現(xiàn)高效穩(wěn)定的文件上傳操作,涵蓋基礎(chǔ)原理、核心方法和實戰(zhàn)案例。

一、DrissionPage上傳文件的核心原理

DrissionPage是一個基于Selenium和Requests的混合驅(qū)動庫,它簡化了瀏覽器自動化操作。網(wǎng)頁中的文件上傳通常通過兩種方式實現(xiàn):

  • 直接操作隱藏的input元素:大多數(shù)網(wǎng)頁使用<input type="file">元素實現(xiàn)上傳功能,即使前端用美觀的按鈕覆蓋,底層仍依賴該元素。
  • 處理JavaScript動態(tài)生成的上傳組件:部分復(fù)雜網(wǎng)頁使用JS動態(tài)創(chuàng)建上傳控件,需要特殊處理。

二、基礎(chǔ)文件上傳實現(xiàn)

1. 最簡上傳示例

from DrissionPage import ChromiumPage

# 初始化瀏覽器
page = ChromiumPage()
page.get('https://example.com/upload')  # 替換為實際上傳頁面

# 直接定位file input并上傳
file_input = page.e('input[type="file"]')  # CSS選擇器
file_input.send_keys(r'C:\test\sample.jpg')  # 發(fā)送文件路徑

2. 完整流程封裝

def upload_file(page, url, file_path):
    """
    通用文件上傳函數(shù)
    :param page: DrissionPage對象
    :param url: 上傳頁面URL
    :param file_path: 本地文件路徑
    :return: 是否上傳成功
    """
    try:
        page.get(url)
        # 等待上傳元素加載(顯式等待更可靠)
        upload_input = page.wait('@input[type="file"]', timeout=10)
        upload_input.send_keys(file_path)
        return True
    except Exception as e:
        print(f"上傳失敗: {str(e)}")
        return False

三、實戰(zhàn)案例:批量上傳圖片并處理結(jié)果

以下是一個完整的實戰(zhàn)案例,實現(xiàn)批量上傳圖片到百度AI平臺并處理識別結(jié)果:

import os
import re
import time
import random
from DrissionPage import ChromiumPage

# 配置參數(shù)
TARGET_DIR = r'G:\驗證碼項目\抖音九宮格語義點選驗證碼\圖片\temp改名文件夾/'
SOURCE_DIR = r'G:\驗證碼項目\抖音九宮格語義點選驗證碼\圖片\3裁剪后的圖片\'
UPLOAD_URL = 'https://chat.baidu.com/search'

def process_images():
    # 初始化瀏覽器
    page = ChromiumPage()
    
    # 確保目標(biāo)目錄存在
    os.makedirs(TARGET_DIR, exist_ok=True)
    
    # 獲取所有圖片
    image_files = [f for f in os.listdir(SOURCE_DIR) if f.lower().endswith(('.jpg', '.png'))]
    
    for img_name in image_files:
        img_path = os.path.join(SOURCE_DIR, img_name)
        
        try:
            # 上傳流程
            page.get(UPLOAD_URL)
            
            # 點擊上傳按鈕(根據(jù)實際頁面結(jié)構(gòu)調(diào)整)
            upload_btn = page.ele('xpath://div[contains(@class,"upload-btn")]')
            upload_btn.click()
            
            # 操作隱藏的file input
            file_input = page.ele('input[type="file"]')
            file_input.send_keys(img_path)
            
            # 填寫表單(示例)
            textarea = page.ele('textarea[id="chat-textarea"]')
            textarea.input("請識別圖片中的內(nèi)容,用【】標(biāo)注結(jié)果")
            
            # 提交
            submit_btn = page.ele('img[class*="submit-button"]')
            submit_btn.click()
            
            # 等待結(jié)果(根據(jù)實際頁面調(diào)整等待條件)
            time.sleep(5)
            
            # 提取識別結(jié)果
            result_div = page.ele('div[class*="marklang"]')
            result_text = result_div.text
            print(f"識別結(jié)果: {result_text}")
            
            # 解析結(jié)果
            matches = re.findall(r'【(.*?)】', result_text)
            if matches:
                # 生成新文件名
                new_name = f"{matches[0]}_{int(time.time()*1000)}_{random.randint(1000,9999)}.jpg"
                new_path = os.path.join(TARGET_DIR, new_name)
                
                # 移動文件(先刪除已存在的同名文件)
                if os.path.exists(new_path):
                    os.remove(new_path)
                os.rename(img_path, new_path)
                print(f"文件已重命名為: {new_name}")
                
        except Exception as e:
            print(f"處理圖片 {img_name} 時出錯: {str(e)}")
            continue

if __name__ == '__main__':
    process_images()

四、高級技巧與注意事項

1. 處理動態(tài)加載的上傳組件

對于使用JavaScript動態(tài)生成的上傳組件,可以嘗試:

# 方法1:先點擊觸發(fā)按鈕再操作input
trigger_btn = page.ele('button[data-action="upload"]')
trigger_btn.click()
file_input = page.ele('input[type="file"]')  # 現(xiàn)在應(yīng)該可見
file_input.send_keys(file_path)

# 方法2:直接執(zhí)行JS觸發(fā)點擊
page.run_js('document.querySelector("input[type=file]").click()')

2. 多文件上傳

# 支持多選的上傳(需頁面允許)
file_input = page.ele('input[type="file"][multiple]')
file_input.send_keys([
    r'C:\test\file1.jpg',
    r'C:\test\file2.png'
])

3. 等待策略優(yōu)化

# 更可靠的等待方式
from DrissionPage.common import Wait

# 等待元素出現(xiàn)(最多10秒)
upload_input = Wait(page).until(lambda p: p.ele('input[type="file"]'))

# 或者使用顯式等待
page.wait('@input[type="file"]', timeout=10)

4. 常見問題解決

文件路徑問題

  • 始終使用絕對路徑
  • Windows路徑使用原始字符串(前綴r)或雙反斜杠

元素定位失敗

  • 檢查元素是否在iframe中(需要先切換)
  • 確認頁面是否完全加載
  • 嘗試多種定位方式(CSS/XPath)

瀏覽器兼容性

  • 確保ChromeDriver版本與瀏覽器匹配
  • 考慮使用無頭模式(options.set_headless()

五、性能優(yōu)化建議

  • 復(fù)用瀏覽器實例:避免頻繁啟動關(guān)閉瀏覽器
  • 并行處理:使用多線程/多進程處理大量文件
  • 異常重試機制:對失敗操作自動重試
  • 日志記錄:詳細記錄上傳過程和結(jié)果

六、總結(jié)

DrissionPage提供了簡潔高效的文件上傳實現(xiàn)方式,通過直接操作隱藏的<input type="file">元素,可以繞過復(fù)雜的前端交互邏輯。掌握本文介紹的核心方法和實戰(zhàn)技巧后,您可以輕松實現(xiàn)各種文件上傳自動化需求。

對于更復(fù)雜的場景,建議結(jié)合DrissionPage的等待機制、異常處理和JavaScript執(zhí)行能力,構(gòu)建健壯的自動化流程。在實際項目中,還應(yīng)考慮添加進度顯示、結(jié)果驗證和錯誤恢復(fù)等功能,提升用戶體驗和系統(tǒng)可靠性。

到此這篇關(guān)于Python使用DrissionPage實現(xiàn)上傳文件的實戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Python DrissionPage上傳文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python實現(xiàn)簡單的微信通知和預(yù)警

    基于Python實現(xiàn)簡單的微信通知和預(yù)警

    這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)簡單的微信通知和預(yù)警功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-12-12
  • 用Python獲取攝像頭并實時控制人臉的實現(xiàn)示例

    用Python獲取攝像頭并實時控制人臉的實現(xiàn)示例

    這篇文章主要介紹了用Python獲取攝像頭并實時控制人臉的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python使用回溯法子集樹模板解決迷宮問題示例

    Python使用回溯法子集樹模板解決迷宮問題示例

    這篇文章主要介紹了Python使用回溯法解決迷宮問題,簡單講述了迷宮問題的原理并結(jié)合實例形式分析了Python基于回溯法子集樹模板解決迷宮問題的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2017-09-09
  • vscode+anaconda搭建python虛擬環(huán)境全攻略 (詳細圖文)

    vscode+anaconda搭建python虛擬環(huán)境全攻略 (詳細圖文)

    本文詳細介紹用VSCode和Anaconda配置Python運行環(huán)境的方法,先是講解 Anaconda的下載、安裝步驟,如勾選關(guān)鍵安裝選項,創(chuàng)建并激活虛擬環(huán)境,接著說明VSCode的安裝過程,以及在其中安裝Python 擴展、選定Anaconda環(huán)境解釋器的操作,最終通過運行“Hello, World!”測試環(huán)境
    2026-02-02
  • python實現(xiàn)的解析crontab配置文件代碼

    python實現(xiàn)的解析crontab配置文件代碼

    這篇文章主要介紹了python實現(xiàn)的解析crontab配置文件代碼,也可以說是python版的crontab,代碼中包含大量注釋,需要的朋友可以參考下
    2014-06-06
  • Python隊列Queue實現(xiàn)詳解

    Python隊列Queue實現(xiàn)詳解

    這篇文章主要介紹了Python隊列Queue實現(xiàn)詳解,隊列是一種列表,隊列用于存儲按順序排列的數(shù)據(jù),隊列是一種先進先出的數(shù)據(jù)結(jié)構(gòu),不同的是隊列只能在隊尾插入元素,在隊首刪除元素,需要的朋友可以參考下
    2023-07-07
  • Python selenium的基本使用方法分析

    Python selenium的基本使用方法分析

    這篇文章主要介紹了Python selenium的基本使用方法,結(jié)合實例形式分析了Python使用selenium模塊進行web自動化測試的基本模塊導(dǎo)入、操作技巧與相關(guān)注意事項,需要的朋友可以參考下
    2019-12-12
  • Python高效實現(xiàn)Excel轉(zhuǎn)TXT文本

    Python高效實現(xiàn)Excel轉(zhuǎn)TXT文本

    在數(shù)據(jù)處理場景中,將Excel文件轉(zhuǎn)換為純文本(TXT)格式便成為了一個常見的需求,本文將解析如何通過?Spire.XLS?for?Python?實現(xiàn)?Excel?到TXT?的高效轉(zhuǎn)換,有需要的可以了解下
    2026-01-01
  • Pycharm報錯:'NoneType'?object?has?no?attribute?'bytes'的解決方法

    Pycharm報錯:'NoneType'?object?has?no?attribute?

    這篇文章主要給大家介紹了關(guān)于Pycharm報錯:'NoneType'?object?has?no?attribute?'bytes'的解決方法,文中通過圖文將解決的方法介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Python可迭代對象操作示例

    Python可迭代對象操作示例

    這篇文章主要介紹了Python可迭代對象操作,涉及Python列表生成式、迭代器、數(shù)據(jù)遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05

最新評論

女性| 驻马店市| 紫云| 新平| 明光市| 林口县| 广平县| 黄陵县| 满洲里市| 峨眉山市| 曲阳县| 乌什县| 修水县| 华蓥市| 定南县| 景宁| 宿松县| 明溪县| 新建县| 宜章县| 兰考县| 偏关县| 斗六市| 公安县| 博爱县| 水城县| 丽水市| 临猗县| 辰溪县| 新巴尔虎左旗| 筠连县| 隆回县| 柞水县| 义乌市| 玛沁县| 贵德县| 宜兴市| 达孜县| 宁安市| 南漳县| 府谷县|