我试图使用Selenium Webdriver (Python)
自动执行WordPress发布内容创建。不幸的是,我无法上传帖子内容中的文件。我已经搜索了解决方案,但是其中大多数使用了send_keys
,不适用于WP插入媒体(请参见下图)。在插入介质中,有两个选项:
选择文件
拖曳档案
我需要一个适用于跨平台(Windows,Linux等)的解决方案。
我想可能会有使用jQuery,JS或其他方式的方法。我对JS不太熟悉,所以我不了解JS的解决方案。
附言我正在使用Python工作,因此Python代码会有所帮助。
如果需要它们,以下是媒体插入框架的来源:
<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。
感谢大家的所有建议和指导。