【发布时间】:2016-12-21 07:33:59
【问题描述】:
我正在为 chrome webdriver 做一个 python selenium 脚本,我需要上传一个文件。当我点击上传按钮时,会弹出一个打开文件对话框,我无法实际上传文件。我尝试过的方法:
使用 selenium ide,并记录我上传文件。它产生了这个结果:
driver.find_element_by_id("html5_1aq7art6u98a1i1eokfk581u443").clear()
driver.find_element_by_id("html5_1aq7art6u98a1i1eokfk581u443").send_keys("")
但是,每次重新加载页面时 id 都会更改,因此这种方法不起作用。我也找不到找到输入文件名的表单的方法。
我也尝试过使用警报和使用 selenium 更改窗口
driver.switch_to_window("Open")
driver.send_keyssend_keys(os.getcwd()+"/file.png")
alert = driver.switch_to.alert
alert.send_keyssend_keys(os.getcwd()+"/file.png")
但是这两种方法都失败了。 (第一个没有找到窗口,第二个告诉我没有打开警报)
作为最后的手段,我正在搜索如何将文件名复制到剪贴板,然后单击上传按钮,等待一秒钟,然后用 python 模拟“crtl+v”,然后是“enter”键新闻,但我不知道该怎么做,互联网搜索将我带到了一些基于 c 的第三方库的黑暗道路,这让我有点不知所措。
这里是发布脚本的完整代码,其余代码(在这部分之前)只是废弃和删除我自己的帖子:
driver.get('https://www.kijiji.ca/p-post-ad.html?categoryId=87')
time.sleep(2)
driver.find_element_by_css_selector("button.button--jss-0-514").click()
driver.find_element_by_id("postad-title").clear()
driver.find_element_by_id("postad-title").send_keys(postTitle)
driver.find_element_by_id("pstad-descrptn").clear()
driver.find_element_by_id("pstad-descrptn").send_keys(postContent)
driver.find_element_by_id("pstad-map-address").clear()
driver.find_element_by_id("pstad-map-address").send_keys(postAdress)
#driver.find_element_by_id("ImageUploadButton").click()
#time.sleep(2)
driver.find_element_by_xpath("//input[@type='file'][contains(@id,'html5_')]").clear()
driver.find_element_by_xpath("//input[@type='file'][contains(@id,'html5_')]").send_keys("file.png")
driver.find_element_by_id("PhoneNumber").clear()
driver.find_element_by_id("PhoneNumber").send_keys(phoneNumber)
driver.find_element_by_id("pstad-email").send_keys(profile)
driver.find_element_by_name("saveAndCheckout").click()
完全错误: [10360:7760:0815/140356:ERROR:latency_info.cc(164)] RenderWidgetHostImpl::OnSwapCompositorFrame,LatencyInfo 向量大小 187 太大。 [10360:7760:0815/140357:ERROR:latency_info.cc(164)] RenderWidgetHostImpl::OnSwapCompositorFrame,LatencyInfo 向量大小 452 太大。 回溯(最近一次通话最后): 文件“KijijiAutoPosting.py”,第 95 行,在 driver.find_element_by_xpath("//input[@type='file'][contains(@id,'html5_')]").clear() 文件“C:\Users\Silve\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 87 行,清晰 self._execute(Command.CLEAR_ELEMENT) 文件“C:\Users\Silve\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 461 行,在 _execute return self._parent.execute(命令,参数) 文件“C:\Users\Silve\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 236 行,在执行中 self.error_handler.check_response(响应) 文件“C:\Users\Silve\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 192 行,在 check_response 引发异常类(消息、屏幕、堆栈跟踪) selenium.common.exceptions.InvalidElementStateException:消息:无效元素状态:元素当前不可交互并且可能无法操作 (会话信息:chrome=52.0.2743.116) (驱动信息:chromedriver=2.9.248315,platform=Windows NT 6.3 x86_64)
【问题讨论】:
-
这里是上传截图:imgur.com/a/ZtFkN