Set-up
我正在使用 Python 3.x 和 Selenium 在网上商店的后端工作。
我需要从我的电脑上传产品图片到平台后端。
Problem
使用 Selenium 可以单击图像上传按钮,但是单击会弹出 MacOS 文件选择器。
Selenium 不适用于 MacOS 文件选择器。我搜索了如何解决这个问题并找到了以下答案,
- https://stackoverflow.com/a/6129464/7326714
- http://www.seleniumstutorial.com/uploading-a-file-in-selenium-with-python/
- https://stackoverflow.com/a/10472542/7326714
然而,这些都不起作用。
按钮周围的 html 是,
<td class="control">
<div class="hide-input">
<input data-val="true" data-val-required="The Image field is required." id="FileName" name="FileName" type="text" value="File636578585362423712.png">
</div>
<div id="uploadifive-FileNameUpload" class="uploadifive-button" style="height: 18px; line-height: 18px; overflow: hidden; position: relative; text-align: center; width: 50px;">Upload<input id="FileNameUpload" type="file" name="FileNameUpload" data-editor="#FileName" data-url="http://also-inc.demohoster.com/upload/uploadfile" data-path="~/UserFiles/Products/Images/" data-maxsize="10240" data-extensions="*.jpg;*.jpeg;*.png;*.gif;*.bmp;" data-thumbnailwidth="128" data-thumbnailheight="128" data-thumbnailpath="/UserFiles/Products/Images/Preview/" data-uniquename="True" data-preview="/UserFiles/Products/Images/Preview/File636578585362423712.png" data-isnew="false" data-auth="2CDE59B99D5F034087CA006254189C31F4388BA02DDE1CD1752A2FCFDE6EB556406CAF9D82DE4E02AC4D7D9813E2CF8B2A1413EF7CE8CA22FDD9822130B4EC239F1BD305F8AA1E5F6E9EFD1CD64138B8A621A88A675A3A528B7DF2F0388C36C473CBAD080CF826A28A3464FB719D039690241E38" data-session="jx134u0kcaxfu4jz1darurvg" class="file-uploader hide-input" style="display: none;"><input type="file" style="font-size: 18px; opacity: 0; position: absolute; right: -3px; top: -3px; z-index: 999;"></div>
<div id="uploadifive-FileNameUpload-queue" class="uploadifive-queue"></div>
</td>
Tries
我尝试过单击按钮然后发送密钥,
browser.find_element_by_id('uploadifive-FileNameUpload').click()
browser.find_element_by_id('uploadifive-FileNameUpload').send_keys('path/to/MyImage.jpeg')
(也尝试过id'uploadifive-FileNameUpload-queue'
and id 'FileName'
在所有可能的组合中)
我尝试过不点击即可发送,即browser.find_element_by_id('uploadifive-FileNameUpload').send_keys('path/to/MyImage.jpeg')
。再次对于所有键。
无论我尝试什么,我都会不断得到ElementNotInteractableException
.
这是我第一次尝试以这种方式上传图像,但我被卡住了。
我该如何解决?
禁用文件选择器并调用sendKeys
on an <input type="file">
根据设计,这是唯一允许接收/保存文件的元素类型:
# disable the OS file picker
browser.execute_script("""
document.addEventListener('click', function(evt) {
if (evt.target.type === 'file')
evt.preventDefault();
}, true)
""")
# make an <input type="file"> available
browser.find_element_by_id('uploadifive-FileNameUpload')\
.click()
# assign the file to the <input type="file">
browser.find_element_by_css_selector('input[type=file]')\
.send_keys('path/to/MyImage.jpeg')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)