簡體   English   中英

python文件上傳硒

[英]python file upload selenium

我使用Selenium和Python將請求發送到網站。 我現在正在上傳文件,但似乎無法正常工作。

這是HTML的樣子:

<div id="uploaders" class="uploaders" data-image-urls="" data-image-ids="" data-image-positions="" data-image-checksums=""><div id="uploader-container-0" class="uploader-container small empty" data-uploader-index="0" data-numbering="1" style="position: relative;">
<div id="file-picker-0" class="uploader-box small" style="position: relative; z-index: 1;">
    <div class="thumb">
        <div class="uploader-overlay">
            <span class="photo-action edit-action">
                <span class="mp-Icon-circle"><span class="mp-Icon mp-svg-edit photo-action-icon"></span></span>
            </span>
            <span class="remove photo-action">
                <span class="mp-Icon-circle"><span class="mp-Icon mp-svg-delete photo-action-icon"></span></span>
            </span>
        </div>
    </div>
    <div class="content">
        <div class="mp-svg-button-camera camera-logo centered"></div>
        <div class="main-photo-subtext centered">
            Hoofdfoto.
        </div>
    </div>
</div>


<input type="hidden" name="images.urls" value="">
<input type="hidden" name="images.ids" value="">
<input type="hidden" name="images.checksums" value="">
<div id="html5_1bdvv7bg0ptl15m6gmu1d4v16l04_container" class="moxie-shim moxie-shim-html5" style="position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; overflow: hidden; z-index: 0;">
<input id="html5_1bdvv7bg0ptl15m6gmu1d4v16l04" type="file" style="font-size: 999px; opacity: 0; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;" multiple="" accept="image/jpeg,.jpg,.jpeg,image/bmp,.bmp,image/png,.png"></div>

如您在代碼底部所看到的,有一個輸入類型文件元素。 但是沒有形式。 在站點上載文件的工作方式如下。 您單擊(+)號。 然后我打開文件選擇對話框,選擇文件。 然后是另一個彈出窗口,要求您單擊一個按鈕以單擊是否要接受某些內容。

我的問題是如何上傳文件。 到目前為止,我還沒有做到這一點。

我的代碼:

upload_photo_field_xpath = ".//*[@id='uploader-container-0']/div/input"
upload_photo_element = WebDriverWait(driver, 10).until(
                                        lambda driver: driver.find_element_by_xpath(upload_photo_field_xpath))

image = os.path.join(os.getcwd(), 'images/' + 'img.jpg')
print(image)
upload_photo_element.send_keys(image)
upload_photo_element.submit()

關於如何解決這個問題有什么想法?

謝謝。

您可以根據自己的要求嘗試以下步驟,這對我來說與上傳文件有關的效果很好

安裝win32com.client

pip install pypiwin32

然后將其包含在您的代碼中,如下所示

import win32com.client

//click on upload button for uploading file
time.sleep(3)//you can use explicit wait here
shell = win32com.client.Dispatch("WScript.Shell")
shell.Sendkeys("C:\\Users\\.....\\File.pdf")//file path to be uploaded
time.sleep(2)
shell.Sendkeys("{ENTER}")
time.sleep(2)

沒關系。 我剛剛通過從瀏覽器切換來進行了測試。 我沒有使用PhantomJS,而是使用Firefox進行測試。 因此,我可以查看幕后實際發生的情況。 通過查看瀏覽器,我了解到它需要等待幾秒鍾才能處理文件上傳處理。

編碼:

'''Image Upload'''

upload_photo_element = driver.find_element_by_xpath(upload_photo_field_ID)
image = os.path.join(os.getcwd(), 'images/' + 'img.png')
upload_photo_element.send_keys(image)

# Depending on how long the image takes to load
time.sleep(5)

upload_photo_reject_button_element = WebDriverWait(driver, 10).until(
lambda driver: driver.find_element_by_id(upload_photo_reject_button_ID))

upload_photo_reject_button_element.click()

'''End image upload'''

該代碼對我有用。

這樣就不會彈出任何窗口。

但我也注意到,這適用於Firefox瀏覽器,但不適用於PhantomJS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM