由于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
提前感谢您的建议
我使用"后门"将文件名填充到文件管理器窗口中。 由于光标已经进入窗口的文件名字段,我在 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}"
我执行这个脚本后用硒打开文件管理器窗口:
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文件中,这不容易像变体一样使用它。
如果你处于类似的困境中,@Armin的答案非常有效。我不知道目前有任何其他方法可以在上传点与文件窗口进行交互。
有关更多详细信息,VBS 文件是 VB 脚本文件的Microsoft。您可以使用记事本创建它,输入代码,另存为,更改文件名,包括".vbs"扩展名并将文件类型更改为所有文件。
如果您按原样使用答案中的代码,您可能会遇到不友好的"未定义变量"错误,因此您应该首先将变量声明为对象:
Dim oWsh as Object
根据您的代码,您可能还会收到使用的"Sleep*"命令的错误。您可以根据需要将其更改为使用隐式或显式"等待":
driver.Wait 1500
干杯!