硒。在新的chrome open文件弹出窗口中上载文件(或如何在python上模拟ctrl+v)

2024-09-29 23:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为chromewebdriver编写python selenium脚本,我需要上传一个文件。当我点击上传按钮时,一个打开的文件对话框弹出,我还没能真正上传文件。我尝试过的方法:

使用selenium ide,并记录我上传文件。结果如下:

driver.find_element_by_id("html5_1aq7art6u98a1i1eokfk581u443").clear()
driver.find_element_by_id("html5_1aq7art6u98a1i1eokfk581u443").send_keys("")

但是,每次重新加载页面时id都会更改,因此此方法不起作用。我也无法找到一种方法来定位表单以键入文件名。在

我还尝试使用警报和使用selenium更改窗口

^{pr2}$

但这两种方法都失败了。(第一个找不到窗口,第二个告诉我没有打开警报)

作为最后的手段,我正在搜索如何将文件名复制到剪贴板,然后单击上载按钮,等待一秒钟,然后用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:错误:latency_info.cc(164)]RenderWidgetHostImpl::OnSwapCompositorFrame,LatencyInfo矢量大小187太大。 [10360:7760:0815/140357:错误:latency_info.cc(164)]RenderWidgetHostImpl::OnSwapCompositorFrame,LatencyInfo矢量大小452太大。 回溯(最近一次呼叫): “文件”KijijiAutoPosting.py“,第95行,英寸 driver.find_元素(“//input[@type='file'][包含(@id,'html5\')]”)。clear() 文件“C:\Users\Silve\AppData\Local\Programs\Python35-32\lib\site packages\selenium\webdriver\remote\网络元素.py“,第87行,清晰可见 自我执行(Command.CLEAR_元素) 文件“C:\Users\Silve\AppData\Local\Programs\Python35-32\lib\site packages\selenium\webdriver\remote\网络元素.py“,第461行,in\u execute 回归自我_父级执行(命令,参数) 文件“C:\Users\Silve\AppData\Local\Programs\Python35-32\lib\site packages\selenium\webdriver\remote\网络驱动程序.py“,第236行,执行中 self.error_处理程序.检查_响应(response) 文件“C:\Users\Silve\AppData\Local\Programs\Python35-32\lib\site packages\selenium\webdriver\remote\错误处理程序.py“,第192行,在check_响应中 引发异常_类(消息、屏幕、stacktrace) selenium.common.异常.InvalidElementStateException:消息:无效的元素状态:元素当前不可交互,不能被操作 (会话信息:chrome=52.0.2743.116) (驱动程序信息:chromedriver=2.9.248315,平台=Windows NT 6.3 x86_64)


Tags: 文件方法pysendid元素bydriver
1条回答
网友
1楼 · 发布于 2024-09-29 23:30:26

尝试以下代码:

driver.find_element_by_xpath("//input[@type='file']").clear()
driver.find_element_by_xpath("//input[@type='file']").send_keys("/path/to/file")

如果只有一个按钮用于文件上载,则此操作应该有效。在

你也可以试试这个XPath

^{pr2}$

相关问题 更多 >

    热门问题