首页 > 解决方案 > Selenium VBA:填写 Windows 弹出窗口以上传文件

问题描述

由于 Chrome 浏览器,我无法与 Windows PopUp 交互以编写专用路径以使用 Selenium 在 VBA 中上传文件。

我在 Python 中找到了一些解决方案,但在 VBA 中没有。这就是为什么我尝试在 VBA 中转换代码但没有成功的原因。

在下面找到示例代码:

Sub Fullfil_Windows_PopUp()
Dim driver
Dim elem

    Set Waiter = CreateObject("Selenium.Waiter")
    Set Assert = CreateObject("Selenium.Assert")
    Set driver = CreateObject("Selenium.ChromeDriver")

    'open the browser and the page
    driver.Get "https://fr.imgbb.com/"
    While Waiter.Not(InStr(driver.Title, "ImgBB — Upload Image — Hébergement d'images gratuit")): Wend

    'open upload window
    Set elem = driver.FindElementsByXPath("//*[@id='home-cover-content']/div[2]/a").Item(1)
    elem.Click

    'Trial 1
    driver.SwitchToWindowByTitle "Ouvrir" '--> NOK (error window not found)
    driver.SendKeys "D:\Test.jpg"

    'Trial 2
    driver.SwitchToAlert.SendKeys "D:\Test.jpg" '--> NOK (error No Alert present)


    'Trial 3
    Set wsh = CreateObject("WScript.Shell")
    wsh.SendKeys "D:\Test.jpg" '--> NOK (no action)


End Sub

提前感谢您的建议

标签: vbawindowsseleniumpathpopup

解决方案


我使用“后门”将文件名填充到文件管理器窗口中。由于光标已经进入窗口的文件名字段,我在 VBS 中创建了一个外部脚本来写入文件名(以及 2x TAB + ENTER 来验证窗口)。

VBS文件的代码下面:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "D:\Test.jpg"
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{ENTER}"

我在使用 selenium 打开文件管理器窗口后执行此脚本:

Sub Fullfil_Windows_PopUp()
Dim driver
Dim elem

    ' Chrome browser
    Set driver = CreateObject("Selenium.ChromeDriver")

    'open the browser and the page
    driver.Get "https://fr.imgbb.com/"
    Sleep 1000

    ' Open upload window
    Set elem = driver.FindElementsByXPath("//*[@id='home-cover-content']/div[2]/a").Item(1)
    elem.Click

    ' Write the filename with VBS script
    Set oWsh = CreateObject("Shell.Application")
    oWsh.ShellExecute "D:\filename.vbs"
    Set oWsh = Nothing
    Sleep 1500

End Sub

但是我继续直接使用 Selenium 搜索解决方案,因为例如,文件名直接指示到 VBS 文件中,这并不容易像变体一样使用它。


推荐阅读