我已经在这个功能上苦苦挣扎了好几个小时了,我无法以任何形式或形式工作。
假设我的元素位置和图像路径始终是正确的。 (说真的,我在过去的4个小时里一直在讨论它,它不是元素的位置而且它不是文件路径。)
我开始使用的是输入元素的sendkeys
。这没有任何错误,但导致脚本永远挂起;它不会超过它而且没有上传图像。
在查找" Python PhanthomJS Selenium上传文件sendkeys"时,我真的尝试了Google前4页列出的sendkeys
方法的每一种可能变体。回到绘图板。
目前我正在考虑通过Python执行一些JavaScript来上传文件,但我不知道如何解决这个问题。
我尝试上传到的页面的表单设置为hidden
,并且只显示一个按钮,可在普通浏览器上打开上传对话框。我觉得这就是sendkeys
无效的原因。
任何人都可以给我一些意见或建议,接下来要尝试什么?或者如何从Python执行一些JavaScript?
修改
我学习了如何在python中使用selenium时执行JavaScript,它节省了我的一天。
对于任何从谷歌或任何有相同问题的人来到这里,让我解释一下我做了什么:
将.send_keys()
发送到input[file=input]
元素时,display: hidden !important
挂起的这一事实让我在制作主题之前感到疑惑但是因为网络驱动程序仍然能够找到元素我并没有想太多它随意耸了耸肩。后来我提出了一个建议,因为它有一个css类型.execute_script()
,webdriver可能已经找到它,但没有与它交互,并且由于某种原因,selenium决定挂起而不是崩溃/给予一个错误。
考虑到这一点,我开始浏览文档并找到input[type=file]
命令,结果我们可以使用它来通过webdriver运行一段JavaScript。为什么我想要这个,就是看看班级造型与它有什么关系,你怎么问?我们可以使用以下代码行来更改document.querySelector("input").className=""
元素的class属性:class
。这不是最优雅的解决方案,因为我们基本上删除了负责display: hidden !important
样式的整个""
。如果课程要保存更重要的数据,我建议更改课程,而不是将其重命名为driver.find_element_by_css_selector('input[type=file]').send_keys('path/to/file')
或删除。
继续尝试,它显示输入按钮就像我希望的那样!在此之后,我只是重新尝试发送密钥,发现没有任何问题。无需点击,提交或任何其他内容。 path/to/file
但是我确实注意到你构建路径的方式似乎非常重要。例如,我正在Windows上进行测试,path\\to\\file
没有为我上传或选择任何图片,使用driver.execute_script('document.querySelector("input")').className=""
,但工作完全正常。
tldr:
driver.find_element_by_css_selector('input[type=file]').send_keys('path/to/file')
接下来是:
let expire = object.created; // object.created: Wed Mar 02 2016 expire.setDate(12); console.log(expire); // Wed Mar 12 2016 console.log(object.created); //Wed Mar 12 2016 <-- WHY?!
是什么对我有用,如果你处于任何相似的情况你的 脚本的变化应该按预期上传图像。