所以基本上我在使用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注入会有所帮助?
根据您的错误消息,我不完全认为该错误消息是由隐藏文件输入引起的。如果是这样,我希望有一个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")