2017-03-23 121 views
0

我正在嘗試使用Selenium Webdriver (Python)自動創建WordPress的發佈內容。不幸的是,我無法上傳文章內容。我已經搜索瞭解決方案,但其中大多數使用send_keys,這不適用於WP插入介質(請參見下圖)。在插入的媒體,有兩種選擇:如何使用Selenium Python在WordPress文章中上傳文件?

  1. 選擇文件
  2. 將文件

我需要一個解決方案,可跨平臺(Windows和Linux等)的工作。 我想可能有一種方法使用一些jQuery,JS或其他東西。我對JS不是很熟悉,所以我不瞭解JS的解決方案。

P.S.我在Python中工作,所以Python代碼將會有所幫助。

enter image description here

這裏是萬一媒體插件框架,你需要他們的資料來源:

<div class="media-frame-content"> 
    <div class="uploader-inline"> 

     <div class="uploader-inline-content no-upload-message"> 

      <div class="upload-ui"> 
       <h2 class="upload-instructions drop-instructions">Drop files anywhere to upload</h2> 
       <p class="upload-instructions drop-instructions">or</p> 
       <a href="#" class="browser button button-hero" style="display: inline; position: relative; z-index: 1;" id="__wp-uploader-id-1">Select Files</a> 
      </div> 

      <div class="upload-inline-status"> 
       <div class="media-uploader-status" style="display: none;"> 
        <h2>Uploading</h2> 
        <button type="button" class="button-link upload-dismiss-errors"><span class="screen-reader-text">Dismiss Errors</span> 
        </button> 

        <div class="media-progress-bar"> 
         <div></div> 
        </div> 
        <div class="upload-details"> 
         <span class="upload-count"> 
       <span class="upload-index"></span>/<span class="upload-total"></span> 
         </span> 
         <span class="upload-detail-separator">–</span> 
         <span class="upload-filename"></span> 
        </div> 
        <div class="upload-errors"></div> 
       </div> 
      </div> 

      <div class="post-upload-ui"> 

       <p class="max-upload-size">Maximum upload file size: 32 MB.</p> 

      </div> 
     </div> 
    </div> 
</div> 
+0

如果它是公共頁面,您可以共享「URL」嗎? – Andersson

+0

爲什麼sendKeys不適用,點擊selectFiles後會發生什麼?我懷疑你會找到一種「可拖動的」硒溶液。另一種解決方案是使用他們的API而不是前端,但我猜這不是太多的硒。 –

+0

@安德森對不起,這不是一個公共頁面。 – zafi005

回答

0

最後,我已經得到了WP的解決方案添加媒體文件上傳。 實際上,我發現當點擊選擇文件按鈕時打開文件選擇窗口時,它會生成一個動態輸入字段。動態的意思是,輸入字段的ID每次都是唯一的。幸運的是,輸入字段ID的第一部分保持不變。例如,ID就像html5_1bc7564i41pq5f7m1voce561a0e5。請參見下面的HTML:

<input id="html5_1bc7564i41pq5f7m1voce561a0e5" style="font-size: 999px; opacity: 0; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;" multiple="" accept="" type="file"/> 

所以,我所做的是,使用該ID的第一部分(html5_),並創建一個XPATH只是用send_keys它完美地工作。我的XPATH是這樣的:

input_file = "//input[starts-with(@id,'html5_')]"

硒代碼:

driver.find_element_by_xpath(input_file).send_keys(file_path)

這裏,file_path是,我需要上傳文件的位置。

我錯過了第一個地方的輸入字段,因爲它不可見並且沒有意識到它與文件上傳相關聯。所以我用selenium IDE記錄了文件上傳步驟,並找到了動態輸入ID。

謝謝大家,對於所有的建議和指導。

0

這裏是你使用的AutoIt的解決方案。

  1. WordPress提供了一個選擇按鈕來上傳新媒體。所以讓我們來幫助這個功能。
  2. 點擊「選擇文件」,文件上傳對話框將打開。
  3. 將文件上傳對話框的屬性傳遞給AutoIT exe。
  4. AutoIT將用所選文件填滿文件路徑區域。
  5. 現在讓WebDriver單擊「上傳」按鈕。

讓我知道這是否回答您的查詢。

+0

謝謝,但我猜AutoIT不適用於Linux。我實際上需要跨OS的解決方案。 – zafi005

相關問題