建立
我正在使用Python 3.x和Selenium在网上商店的后端工作。
我需要从计算机的平台后端上载产品图像。
问题
使用Selenium可以单击图像上载按钮,但是单击将弹出MacOS文件选择器。
Selenium在MacOS文件选择器上不起作用。我搜索了如何解决此问题,并找到了以下答案,
但是,这些都不起作用。
按钮周围的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>
尝试
我尝试单击按钮,然后发送密钥,
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'和id 'FileName')
'uploadifive-FileNameUpload-queue'
'FileName'
而且我尝试不单击即发送即发browser.find_element_by_id('uploadifive- FileNameUpload').send_keys('path/to/MyImage.jpeg')。再次为所有键。
browser.find_element_by_id('uploadifive- FileNameUpload').send_keys('path/to/MyImage.jpeg')
无论我如何尝试,我都会不断收到ElementNotInteractableException。
ElementNotInteractableException
这是我第一次尝试以这种方式上传图片,但遇到了麻烦。
我该如何解决?
禁用文件选择器,并调用sendKeys,<input type="file">这是设计允许的唯一一种元素来接收/保存文件:
sendKeys
<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')