Javascript Selenium Python-在元素似乎被隐藏时上载图像

Javascript Selenium Python-在元素似乎被隐藏时上载图像,javascript,python,selenium,image-uploading,hidden-field,Javascript,Python,Selenium,Image Uploading,Hidden Field,所以基本上我在使用Selenium Python上传一些照片时遇到了问题 输入元素似乎隐藏在页面中,因此.sendkeys方法在静止时遇到了一些错误 这是输入元素的html代码 <div data-react-class="ImageUploadForm" data-react-props="{}" data-react-cache-id="ImageUploadForm-0"> <input class="hidden" type="file" accept="imag

所以基本上我在使用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>
现在运行上述代码后,我得到类型错误: 值=(PosixPath('../core/attachments/clientstackphoto.jpeg'),)

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

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


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

根据您的错误消息,我不完全相信错误消息是由隐藏的文件输入引起的。如果是这样,我希望出现
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使文件输入可见,您就可以像任何其他输入一样
向其发送\u key

fileInput.send_keys("PATH/TO/FILE/HERE")

似乎还有其他一些错误重新格式化类型错误:
在send_keys{'text':“”。join(keys_to_typing(value)),E TypeError:type'PosixPath'的对象没有len()selenium/webdriver/common/utils.py:150:TypeError[100%]
我将尝试将相对路径复制到jpg文件,除此之外,感谢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)
driver.execute_script("arguments[0].setAttribute('class', 'visible')", fileInput)
fileInput.send_keys("PATH/TO/FILE/HERE")