Selenium Python-当元素似乎被隐藏时上传图像

问题描述 投票:0回答:1

所以基本上我在使用Selenium Python上传一些照片时遇到问题输入元素似乎隐藏在页面中,因此.sendkeys方法仍然仍然遇到一些错误。

这是输入元素的html代码

 <div data-react-class="ImageUploadForm" data-react-props="{}" data-react-cache-id="ImageUploadForm-0">
  <input class="hidden" type="file" accept="image/jpeg, image/jpg, image/png, image/gif">
  <button class="btn btn-lemonfrog text-lg" type="button">Upload photo</button>
 </div>
base_path = Path(file).parent
filepath = (basepath / "../core/attachments/clientstackphoto.jpeg").resolve()
hiddenuploaderinput.sendkeys(filepath)

现在运行上面的代码后,我得到类型错误:值=(PosixPath('......... / core / attachments / clientstackphoto.jpeg'),)

def keys_to_typing(value):
    """Processes the values that will be typed in the element."""
    typing = []
    for val in value:
        if isinstance(val, Keys):
            typing.append(val)
        elif isinstance(val, int):
            val = str(val)
            for i in range(len(val)):
                typing.append(val[i])
        else:
          for i in range(len(val)):

E TypeError:“ PosixPath”类型的对象没有len()

../../ venv / lib / python3.7 / site-packages / selenium / webdriver / common / utils.py:150:TypeError

我希望成功上传照片,也许进行一些js注入会有所帮助?

javascript python selenium image-uploading hidden-field
1个回答
0
投票

根据您的错误消息,我不完全认为该错误消息是由隐藏文件输入引起的。如果是这样,我希望有一个ElementNotVisibleException

但是,我确实看到输入是隐藏的,因此我们应该运行一些JS来显示输入,也许我们可以排除掉这是潜在的问题。

显示图像输入的代码

fileInput = driver.find_element_by_xpath("//input[@type='file']")

# display file input so we can send keys
driver.execute_script("arguments[0].style.display = 'block';", fileInput)

或者,您可能需要在class属性上执行脚本:

driver.execute_script("arguments[0].setAttribute('class', 'visible')", fileInput)

一旦执行JS使文件输入可见,就可以像其他任何输入一样对它进行send_keys

fileInput.send_keys("PATH/TO/FILE/HERE")
© www.soinside.com 2019 - 2024. All rights reserved.