我已经为这个功能苦苦挣扎了几个小时了,但我无法让它以任何形式或形式工作。在
假设元素位置和图像路径始终正确。(说真的,我在过去的4个小时里一直在讨论这个问题,这不是元素位置,也不是文件路径。)
我开始使用的是输入元素的sendkeys
。这不会出错,但会导致脚本永远挂起;它无法通过它,也不会上载任何图像。在
在寻找“pythonphanthomjs Selenium upload file sendkeys”时,我确实尝试了Google前4页列出的sendkeys
方法的每一个可能的变体。回到绘图板上。在
目前我正在研究通过Python执行一点JavaScript来上传文件,不过我不知道该怎么做。在
我试图上载的页面的表单设置为hidden
,并且只显示一个按钮,在普通浏览器上打开上载对话框。我觉得这就是sendkeys
不起作用的原因。在
有谁能给我一些意见或建议作为下一步的尝试吗?或者如何从Python中执行JavaScript?在
编辑:我学会了如何在python中使用selenium时执行JavaScript,这让我省了不少时间。
对于任何来自谷歌或其他有同样问题的人,让我解释一下我所做的:
当我向input[file=input]
元素发送键时,我的.send_keys()
挂起了,这让我在提出这个主题之前感到疑惑,但由于Web驱动程序仍然能够找到该元素,所以我没有太多考虑它,并将其视为随机的。但是后来我提出了一个建议,因为它有一个css类型display: hidden !important
,所以webdriver可能能够找到它,但是不能与它交互,出于某种原因,selenium决定挂起自己,而不是崩溃/给出错误。
考虑到这一点,我开始浏览文档,发现了.execute_script()
命令,结果我们可以使用它通过webdriver运行一段JavaScript。我之所以要这样做,是想看看班级的造型是否与此有关,你怎么问?我们可以使用下面的代码行来更改input[type=file]
元素的class属性:document.querySelector("input").className=""
。这不是最优雅的解决方案,因为我们基本上删除了负责display: hidden !important
样式的整个class
。如果类要保存更重要的数据,我建议更改类,而不是将其重命名为""
或删除。
继续并尝试它,它显示了输入按钮,就像我希望的那样!在这之后,我只是再次尝试发送钥匙,没有发现任何问题。不需要点击、提交或任何东西。driver.find_element_by_css_selector('input[type=file]').send_keys('path/to/file')
不过,我注意到,构建路径的方式似乎非常重要。例如,我在windows上测试,path/to/file
没有为我上传或选择任何图像,但是使用path\\to\\file
就可以了。
tldr:
driver.execute_script('document.querySelector("input")').className=""
followed by:
driver.find_element_by_css_selector('input[type=file]').send_keys('path/to/file')
Is what worked for me, and if you are in any alike situation your variation on the script should upload the image as intended.
目前没有回答
相关问题 更多 >
编程相关推荐