python - Selenium python 与 FileOpen 窗口交互

标签 python selenium

通过 Selenium,我成功地实现了网站任务的自动化。 但是我遇到了一个问题:我需要在提交表单之前将文件上传到我的网页。 将上传的文件写入其输入元素不是一种选择,因为它比这更复杂。 所以基本上我需要通过单击按钮启动 FileUpload 对话框,在那里发送 key ,然后通过单击确定关闭它。 我想知道仅使用 Selenium 是否有可能做到这一点? 我在 python 中使用它(所以我无权访问 Robot 类)

I tried so far:

element.click()
time.sleep(5)
alert = driver.switch_to.alert
alert.send_keys("path.to.myfile.txt")
alert.accept()

(没有任何反应 - 我的意思是,文件打开对话框工作正常,但它不发送 key )

I also tried:

alert = driver.switch_to.alert
buildu = ActionChains(driver).send_keys('path.to.my.file.txt')
buildu.perform()

(也无法正常工作)

可能是我看错了... 也许警报不是一个好方法? 你有什么主意吗? 我宁愿不必使用 AUTOIT(出于我自己的原因)

所以我的目标是点击一个链接元素(完成)然后链接打开文件上传打开文件对话框(完成),然后我需要能够在新窗口的唯一文本框中输入文本,并且点击确定按钮

编辑 这是显示的“打开文件”对话框。

enter image description here

我想做的就是将文件名直接发送到窗口(当对话框出现时文本框被聚焦,所以不需要做更多的操作)。发送 key (文本)后,我需要能够点击打开按钮

最佳答案

我不知道这是否仅限于 Windows 10 或在其他 Windows 版本中的工作方式略有不同,但您可以使用以下代码/想法。

  1. 使用 win32com.client.Dispatch("WScript.Shell") 打开 windows shell>
  2. 发送 Tab 键以在打开的文件对话框中导航
  3. 将您的绝对文件路径粘贴到对话框的顶部,也粘贴到文件选择文本字段中,然后发送回车键 选项卡导航到“打开”按钮
  4. 在每个操作之间至少休眠 1 秒..否则 Windows 会阻止此操作。

    import win32com.client as comclt
    

    ...

        def handle_upload_file_dialog(self, file_path):
            sleep = 1
            windowsShell = comclt.Dispatch("WScript.Shell")
            time.sleep(sleep)
            windowsShell.SendKeys("{TAB}{TAB}{TAB}{TAB}{TAB}")
            time.sleep(sleep)
            windowsShell.SendKeys("{ENTER}")
            time.sleep(sleep)
            windowsShell.SendKeys(file_path)
            time.sleep(sleep)
            windowsShell.SendKeys("{TAB}{TAB}{TAB}{TAB}{TAB}")
            time.sleep(sleep)
            windowsShell.SendKeys(file_path)
            time.sleep(sleep)
            windowsShell.SendKeys("{TAB}{TAB}")
            time.sleep(sleep)
            windowsShell.SendKeys("{ENTER}")
    

    ...

关于python - Selenium python 与 FileOpen 窗口交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34197991/

相关文章:

python - 如何在 scrapy-splash 中设置启动超时?

python - 当文件路径输入不可见时在 selenium python 中上传照片

selenium - org.openqa.selenium.NoSuchElementException : Unable to locate element

java - 使用 Gradle maxParallelForks 属性执行并行测试

python - Pygame:将png图像中的所有白色像素转换为完全透明

python - 在 for 循环中直接调用 SeqIO.parse() 可以,但是事先单独使用它不行吗?为什么?

python - pandas 中大数据统计的最佳方式

python - scrapy - 获取最终重定向的 URL

python - 获取 www 子域或特定域的 cookie?

python - 将扩展与 Selenium (Python) 结合使用