使用Selenium通过MacOS窗口上传图像 [英] Upload image through MacOS window with Selenium

查看:113
本文介绍了使用Selenium通过MacOS窗口上传图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

设置

我正在使用Python 3.x和Selenium在网上商店的后端工作.

I'm using Python 3.x and Selenium to work on the back-end of a webshop.

我需要从计算机的平台后端上载产品图像.

I need to upload a product image from my computer on the platform's back-end.

问题

Selenium可以单击图像上载按钮,但是单击会弹出MacOS文件选择器.

The image Upload button is clickable with Selenium, however clicking results in a MacOS file picker popping up.

Selenium在MacOS文件选择器上不起作用.我搜索了如何解决此问题,并找到了以下答案,

Selenium doesn't work on the MacOS file picker. I have searched how to solve this problem and found the following answers,

  1. https://stackoverflow.com/a/6129464/7326714
  2. http://www.seleniumstutorial.com/用python/
  3. 上传硒中的文件
  4. https://stackoverflow.com/a/10472542/7326714
  1. https://stackoverflow.com/a/6129464/7326714
  2. http://www.seleniumstutorial.com/uploading-a-file-in-selenium-with-python/
  3. https://stackoverflow.com/a/10472542/7326714

但是,这些都不起作用.

However, none of this works.

按钮周围的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>


尝试

我尝试单击按钮,然后发送密钥,

I've tried clicking the button and then sending keys,

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

(also tried id 'uploadifive-FileNameUpload-queue' and id 'FileName' in all possible combinations)

并且我尝试不单击即发送,即browser.find_element_by_id('uploadifive-FileNameUpload').send_keys('path/to/MyImage.jpeg').再次为所有键.

And I've tried sending without clicking, i.e. browser.find_element_by_id('uploadifive-FileNameUpload').send_keys('path/to/MyImage.jpeg'). Again for all keys.

无论我尝试什么,我都会得到ElementNotInteractableException.

Whatever I try, I keep getting a ElementNotInteractableException.

这是我第一次尝试以这种方式上传图片,但我被卡住了.

This is the first time I'm trying to upload an image this way, and I'm stuck.

我该如何解决?

推荐答案

禁用文件选择器,并在<input type="file">上调用sendKeys,这是设计允许的唯一类型的元素,用于接收/保存文件:

Disable the file picker and call sendKeys on an <input type="file"> which is by design the only type of element allowed to receive/hold a 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')

这篇关于使用Selenium通过MacOS窗口上传图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆