我试图使用Selenium Webdriver (Python)自动执行WordPress发布内容创建。不幸的是,我无法上传帖子内容中的文件。我已经搜索了解决方案,但是其中大多数使用了send_keys,不适用于WP插入媒体(请参见下图)。在插入介质中,有两个选项:


选择文件
拖曳档案


我需要一个适用于跨平台(Windows,Linux等)的解决方案。
我想可能会有使用jQuery,JS或其他方式的方法。我对JS不太熟悉,所以我不了解JS的解决方案。

附言我正在使用Python工作,因此Python代码会有所帮助。

javascript - 如何使用Selenium Python在WordPress帖子中上传文件?-LMLPHP

如果需要它们,以下是媒体插入框架的来源:

<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>

最佳答案

最后,我为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。

感谢大家的所有建议和指导。

07-24 09:44
查看更多