Excel 无法使用selenium VBA在chrome中的选项卡之间切换
嗨,我发现在chrome selenium VBA编码中在选项卡之间切换很困难。 我有这个网站: 其中,我需要输入IEC代码:0906008051 装运提单编号:Excel 无法使用selenium VBA在chrome中的选项卡之间切换,excel,vba,selenium,selenium-webdriver,selenium-chromedriver,Excel,Vba,Selenium,Selenium Webdriver,Selenium Chromedriver,嗨,我发现在chrome selenium VBA编码中在选项卡之间切换很困难。 我有这个网站: 其中,我需要输入IEC代码:0906008051 装运提单编号: 3929815 3953913 3979509 然后输入验证码(我可以给用户10秒的时间) 完成所有这些之后,我需要单击“显示详细信息”(按ctrl键),以便它在下一个选项卡中打开,然后从该选项卡复制特定数据,然后关闭它。 然后,将从excel表中获取新的发货单编号,然后重复该过程 我可以管理这么多代码: Option Explici
Option Explicit
Public Sub multipletabtest()
Dim bot As WebDriver
Dim keys As New Selenium.keys
Dim count As Long
Set bot = New WebDriver
bot.Start "Chrome"
'count = 1
'While (Len(Range("A" & count)) > 0)
bot.Get "http://dgftebrc.nic.in:8100/BRCQueryTrade/index.jsp"
bot.FindElementByXPath("//input[@type='text'][@name='iec']").SendKeys "0906008051"
bot.FindElementByXPath("//input[@type='text'][@name='sno']").SendKeys "3929815"
bot.Wait 10000 'Time to enter the captcha
bot.FindElementByCss("[value='Show Details']").SendKeys keys.Control, keys.Enter 'Take the value from final result sheet
bot.SwitchToNextWindow
ThisWorkbook.Sheets("Sheet1").Range("B1") = bot.FindElementByXPath("//text()[.='Used']/ancestor::td[1]").Text
'Range("B" & count) = bot.FindElementByXPath("//text()[.='Used']/ancestor::td[1]").Text 'To extract the data
'bot.Window.Close
bot.SwitchToPreviousWindow
bot.FindElementByXPath("//input[@type='text'][@name='sno']").Clear
bot.FindElementByXPath("//input[@type='text'][@name='sno']").SendKeys "3953913"
bot.FindElementByCss("[value='Show Details']").SendKeys keys.Control, keys.Enter
bot.SwitchToNextWindow
ThisWorkbook.Sheets("Sheet1").Range("B2") = bot.FindElementByXPath("//text()[.='Used']/ancestor::td[1]").Text
'Range("B" & count) = bot.FindElementByXPath("//text()[.='Used']/ancestor::td[1]").Text
'count = count + 1
'Wend
bot.Quit
End Sub
请调查一下,帮我解决这个问题
谢谢。XMLHTTP请求: 我会避开这一步,同时避免使用浏览器的开销 向
http://dgftebrc.nic.in:8100/BRCQueryTrade/brcIssuedTrade.jsp
并提取JSESSION
cookie(您可能可以使用.getResponseHeader(“设置cookie”)
)然后对同一url发出后续POST xhr请求,但在请求头和正文中提供cookie,确保传递相关参数值
所需的参数值为:
data = {
'iec': '0906008051',
'sno': '3929815',
'billid': '',
'brcstat': 'A',
'captext': 'a7m3p',
'B1': 'Show Details'
}
在VBA中,.send body
的帖子正文如下所示:
"iec=0906008051&sno=3929815&billid&brcstat=A&captext=a7m3p&B1=Show Details"
其中,iec
和sno
是动态的,您可以连接到每个请求的主体中,可能是在一个循环中
"iec=" & iec & "&sno=" & sno & "&billid&brcstat=A&captext=" & capText & "=Show Details"
如果验证码发生变化,则可以提示用户输入captext
param的值,并将其传递到正文中
尽管您可能会添加一个用户代理,但不要认为需要任何额外的头
e、 g
了解xmlhttp(XHR)请求或Google(在搜索栏vba jsession cookie
中输入以下内容,然后按enter键)
POST请求的响应将包含html,其中包含所需的表
硒: 如果您希望继续使用Selenium,并且假设您已在之前的操作中启用了“显示详细信息”按钮,则可以使用以下属性=值选择器:
bot.FindElementByCss("[value='Show Details']").click
使用SwitchTo方法。例如,如果希望继续使用原始窗口,请记住切换回默认值。通过早期绑定,您应该可以在实例化的webdriver对象上获得可能的方法列表。我还需要帮助单击Submit按钮(Ctrl+单击Submit按钮),这就是我发现的困难所在。非常感谢您的时间和努力,但selenium代码似乎没有完成我想要的任务。我希望它通过提交按钮在新选项卡(子选项卡)中打开结果,然后从中提取值,然后关闭它。后来,由于IEC代码相同,所以从excel文件中获取一个新的发货单编号(另外一点是验证码将保持不变),然后再次执行ctrl+单击功能以打开一个子选项卡进行提取,依此类推。没有提交按钮有一个“显示详细信息”按钮,我一直将其称为“提交”按钮。你可以不用硒就完成整个过程。关于selenium,上面将单击show details(显示详细信息)按钮,但您需要检查之前的步骤是否已启用该按钮(提交验证码后-大概是必填字段的填充)。是的,我之前的selenium步骤已填充所有必填字段,我只需要做一个ctrl+鼠标左键,这样新的标签就会打开,然后执行该功能,然后关闭它,因为这样我只需要输入一次验证码。selenium中没有ctrl+鼠标左键快捷方式?
bot.FindElementByCss("[value='Show Details']").click