使用Selenium VBA在弹出窗口中单击OK
尝试自动化在线订单流程。订单规格完成后,按保存按钮。如果项目规格(高度)大于1000mm,将显示弹出窗口。我无法自动单击它。它不在iframe中 在下面代码的第二行:使用Selenium VBA在弹出窗口中单击OK,vba,selenium,xpath,css-selectors,popupwindow,Vba,Selenium,Xpath,Css Selectors,Popupwindow,尝试自动化在线订单流程。订单规格完成后,按保存按钮。如果项目规格(高度)大于1000mm,将显示弹出窗口。我无法自动单击它。它不在iframe中 在下面代码的第二行: bot.FindElementById(“ctl00\u main content\u ucordedtailblind\u btnSave”)。单击 如果>1000mm条件为真,“单击”将导致弹出警告显示。它只有一个按钮-“确定”(编码为nbsp;OK nbsp;)。手动单击允许自动进入下一页,但我需要帮助获得自动执行此操作的编
bot.FindElementById(“ctl00\u main content\u ucordedtailblind\u btnSave”)。单击
如果>1000mm条件为真,“单击”将导致弹出警告显示。它只有一个按钮-“确定”(编码为nbsp;OK nbsp;)。手动单击允许自动进入下一页,但我需要帮助获得自动执行此操作的编码。此时代码显示为挂起,显示弹出窗口。Debug表示无法执行下一条指令-显然是因为找不到findElementById…Click,因为进程已被卡住
我已经尝试了几种替代方案-请查看我尝试过的最有可能的方案的代码
If ThisWorkbook.Sheets("SquareSpace").Cells(r, "F").Value > 1000 Then ' The item is more than 1000mm high
bot.FindElementById("ctl00_mainContent_ucOrderDetailBlind_btnSave").Click
'Alternative 1
bot.FindElementByXPath("//input[@ID='popup_ok' and text()=' OK ']").Click
'Alternative 2
bot.SwitchToAlert.Accept
bot.Wait 1000
Alternative 3
bot.FindElementById("popup_ok").Click
Else ' for when the item is not more than 1000mm high
bot.FindElementById("ctl00_mainContent_ucOrderDetailBlind_btnSave").Click
bot.Wait 500
End If
'Then the next instruction of the form bot.FindElementById ......Click
为清晰起见,删除了一些内容的HTML(文本和样式):
警告
警告文字
如有任何建议,我们将不胜感激。谢谢。要单击值为“确定”的元素,您可以使用以下任一选项:
- 使用
FindElementByCss()
:
- 使用
findelementbypath()
:
尝试使用javascript单击按钮:
[编辑-更新的标识符]
element=bot.FindElementByXPath("//input[@id='popup_ok']")
x =bot.ExcuteScript("arguments[0].click();", element)
[以上代码已更新-见备注]
[下文新增]
让它如预期的那样运行起来有点乐趣
这是我的小测试函数,让您了解我用来检查的内容:
Function selenium()
Dim driver As New WebDriver
Dim element As WebElement
driver.Start "chrome"
driver.Get "https://www.google.co.uk"
driver.FindElementByXPath("//input[@name='q']").SendKeys "hello world"
Set element = driver.FindElementByXPath("//input[@value='Google Search']")
x = driver.ExecuteScript("arguments[0].click();", element)
End Function
不知道为什么我必须从执行脚本中分配一个响应,但没有它它就无法工作。我尝试使用Css和XPath方法,还尝试了:bot.findelementbypath(//div[@id='popup\u container']//div[@id='popup\u content']//div[@id='popup\u panel']]/input[@id='popup\u ok'])。单击
不确定语法是否正确-但它不起作用。错误发生在它执行下一条指令时,因此我断定它没有离开页面。谢谢你给我更多的建议谢谢。一旦我解决了另一个问题,这个解决方案就起作用了。很抱歉,我无法转换为Selenium VBA Syntax。不用担心,伙计。我上网后再看看:-)嗨,里奇,谢谢。我将此行替换为bot.FindElementById(“ctl00\u mainContent\u ucordedtailblind\u btnSave”)。单击这些Set element=bot.FindElementById(“ctl00\u mainContent\u ucordedtailblind\u btnSave”)
X=bot.ExecuteScript(“参数[0]。Click()”,element)
。什么样的变量是“X”?当例程试图找到一个不存在的元素时,它会暂停—所以我猜它没有关闭弹出窗口—我无法告诉您x是什么—如果不指定返回变量,它就不会为我运行。如果在查找对象时出现延迟,请尝试另一个标识符?-尝试一个通用的xpath,比如//input[@id='popup\u ok'],我现在知道了,我借用了你现有的findby id,它不在你的html源代码中!很抱歉-您需要单击输入/按钮以使其工作。。。尝试新的xpath,如果您需要验证chrome devtools中是否存在xpath的步骤,请告诉我-我也将使用新的xpath更新上述内容
bot.Wait 5000
bot.FindElementByXPath("//div[@id='popup_container']//div[@id='popup_panel']/input[@id='popup_ok']").Click
element=bot.FindElementByXPath("//input[@id='popup_ok']")
x =bot.ExcuteScript("arguments[0].click();", element)
Function selenium()
Dim driver As New WebDriver
Dim element As WebElement
driver.Start "chrome"
driver.Get "https://www.google.co.uk"
driver.FindElementByXPath("//input[@name='q']").SendKeys "hello world"
Set element = driver.FindElementByXPath("//input[@value='Google Search']")
x = driver.ExecuteScript("arguments[0].click();", element)
End Function