Excel 无法使用selenium VBA在chrome中的选项卡之间切换

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

嗨,我发现在chrome selenium VBA编码中在选项卡之间切换很困难。 我有这个网站: 其中,我需要输入IEC代码:0906008051 装运提单编号:

  • 3929815
  • 3953913
  • 3979509
  • 然后输入验证码(我可以给用户10秒的时间) 完成所有这些之后,我需要单击“显示详细信息”(按ctrl键),以便它在下一个选项卡中打开,然后从该选项卡复制特定数据,然后关闭它。 然后,将从excel表中获取新的发货单编号,然后重复该过程

    我可以管理这么多代码:

    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