2017-03-23 25 views
0

私はSelenium Webdriver (Python)を使ってWordPress投稿コンテンツの作成を自動化しようとしていました。残念ながら、投稿コンテンツにファイルをアップロードすることはできません。私は解決策を探しましたが、そのほとんどはsend_keysを使用しましたが、これはWP挿入メディアには適用されません(下の画像を参照)。Selenium Pythonを使用してWordPressの投稿にファイルをアップロードするには?

  1. ファイルを選択
  2. ドラッグファイル

私は、クロスプラットフォーム(WindowsやLinuxなど)のために働くだろうソリューションが必要:挿入メディアでは、2つのオプションがあります。 いくつかの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

@Andersson申し訳ありませんが、これは公開ページではありません。 – zafi005

答えて

0

は最後に、私は、メディアファイルのアップロードを追加するWPのためのソリューションを持っています。 実際には、ファイル選択ウィンドウを開くとファイル選択ウィンドウが開くと、動的入力フィールドが生成されることがわかりました。動的な意味では、入力フィールドのIDは毎回一意です。幸いにも、入力フィールドのIDの最初の部分は同じままです。たとえば、IDはhtml5_1bc7564i41pq5f7m1voce561a0e5です。私は、ID(html5_)の最初の部分を使用してXPATHを作成しなかったものを、そう

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

と単にsend_keysを使用し、それは完全に働いた:以下のHTMLを参照してください。私のXPATHは次のようである:

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

セレンコードは次のとおりです。ここで

driver.find_element_by_xpath(input_file).send_keys(file_path)

file_pathは私がアップロードする必要があるファイルの場所です。

最初は入力フィールドが見当たりませんでした。入力フィールドが表示されず、ファイルアップロードに関連付けられていることを認識しませんでした。だから私はセレンIDEでファイルのアップロード手順を記録し、動的入力IDを発見した。

皆さん、ありがとうございました。

0

はあなたのAutoItを使用するためのソリューションです。

  1. WordPressには、新しいメディアをアップロードするための選択ボタンが用意されています。だから私たちはその機能の助けを借りてみましょう。
  2. [ファイルの選択]をクリックすると、[ファイルのアップロード]ダイアログボックスが開きます。
  3. [ファイルアップロード]ダイアログボックスのプロパティをAutoIT exeに渡します。
  4. AutoITはファイルパス領域を選択したファイルで埋めます。
  5. WebDriverで[アップロード]ボタンをクリックします。

これがあなたの質問に答えるかどうか教えてください。

+0

ありがとう、AutoITはLinuxでは動作しません。実際には、クロスOSのソリューションが必要です。 – zafi005

関連する問題