2017-03-23 104 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

相关问题