无法通过selenium VBA从excel中的列表输入数据
我有一个网站“”,在这里我需要输入IEC代码-我有不同的端口可供选择(这是我发现的困难),然后需要在下面输入发货单(同样取自excel) IEC规范无法通过selenium VBA从excel中的列表输入数据,excel,vba,selenium,selenium-webdriver,Excel,Vba,Selenium,Selenium Webdriver,我有一个网站“”,在这里我需要输入IEC代码-我有不同的端口可供选择(这是我发现的困难),然后需要在下面输入发货单(同样取自excel) IEC规范 039203249 039203249 端口 INBOM4(孟买航空货运) 那格布尔因格普6号酒店 运单编号 3963373 3954544 我已经编写了代码,但是在选择这些端口名时发现有困难 Option Explicit Public Sub Shippingdetails() ' Entering IEC code
- 039203249
- 039203249 端口
- INBOM4(孟买航空货运)
- 那格布尔因格普6号酒店
- 3963373
- 3954544
Option Explicit
Public Sub Shippingdetails() ' Entering IEC code and port number
Dim bot As WebDriver
Dim count As Long
Set bot = New WebDriver
bot.Start "Chrome"
count = 1
While (Len(Range("A" & count)) > 0)
bot.Get "http://dgftcom.nic.in/licasp/sbdetformnew.asp"
bot.FindElementByXPath("//input[@type='text'][@name='D5']").SendKeys Range("A" & count)
bot.FindElementByXPath("//*[@id='AutoNumber1']/tbody/tr[7]/td[3]/font").AsSelect.SelectByText Range("B" & count)
bot.FindElementByXPath("//input[@type='text'][@name='T5']").SendKeys Range("C" & count)
bot.FindElementById("button1").Click
Range("D" & count) = bot.FindElementByXPath("//html/body/div/center/div/table[4]/tbody/tr[2]/td[7]/font").Text
'Range("E" & count) = bot.FindElementByCss("table td[8], table + font").Text
Range("E" & count) = bot.FindElementByXPath("/html/body/div/center/div/table[4]/tbody/tr[2]/td[8]/font/b")
'bot.Wait 1000
count = count + 1
Wend
bot.Quit
End Sub
最后,我需要提取“文件编号和日期”和“状态”。
请帮助我。请尝试下面的
xpath
进行选择
bot.FindElementByXPath("//select[@name='D8']").AsSelect.SelectByText Range("B" & count)
我建议使用SelectByValue
bot.FindElementByXPath("//select[@name='D8']").AsSelect.SelectByValue "INBLR4"
要处理此错误,请尝试以下操作。检查元素计数>0
If bot.FindElementsByXPath("//html/body/div/center/div/table[4]/tbody/tr[2]/td[7]/font").Count >0 Then
Range("D" & count) = bot.FindElementByXPath("//html/body/div/center/div/table[4]/tbody/tr[2]/td[7]/font").Text
If bot.FindElementsByXPath("/html/body/div/center/div/table[4]/tbody/tr[2]/td[8]/font/b").Count >0 Then
Range("E" & count) = bot.FindElementByXPath("/html/body/div/center/div/table[4]/tbody/tr[2]/td[8]/font/b").Text
请尝试在下面
xpath
进行选择
bot.FindElementByXPath("//select[@name='D8']").AsSelect.SelectByText Range("B" & count)
我建议使用SelectByValue
bot.FindElementByXPath("//select[@name='D8']").AsSelect.SelectByValue "INBLR4"
要处理此错误,请尝试以下操作。检查元素计数>0
If bot.FindElementsByXPath("//html/body/div/center/div/table[4]/tbody/tr[2]/td[7]/font").Count >0 Then
Range("D" & count) = bot.FindElementByXPath("//html/body/div/center/div/table[4]/tbody/tr[2]/td[7]/font").Text
If bot.FindElementsByXPath("/html/body/div/center/div/table[4]/tbody/tr[2]/td[8]/font/b").Count >0 Then
Range("E" & count) = bot.FindElementByXPath("/html/body/div/center/div/table[4]/tbody/tr[2]/td[8]/font/b").Text
你可以跳过表单直接进入结果页面,浏览器自动化在我使用它的时候从来没有这么好用过 以下函数与IEC、EDI和BillNumber一起提供时,将返回包含结果的HTMLDocument 下面的
子主菜单将把所需数据打印到即时窗口。我不确定如何对函数的结果使用XPath,所以我只是硬编码了位置
Public Function GetDetail(ByVal IEC As String, ByVal EDI As String, ByVal ShippingBillNumber As String) As Object
Dim Request As Object: Set Request = CreateObject("MSXML2.serverXMLHTTP")
Dim Result As Object: Set Result = CreateObject("htmlfile")
Request.Open "POST", "http://dgftcom.nic.in/licasp/newsbdet.asp", False
Request.setRequestHeader "content-type", "application/x-www-form-urlencoded"
Request.send "D5=" & IEC & "&D8=" & EDI & "&T5=" & ShippingBillNumber & "&button1=SB-Detail"
Result.body.innerHTML = Request.responseText
Set GetDetail = Result
End Function
Sub Main()
Dim x As Object
Dim Data As Object
Set x = GetDetail("0392032449", "INBOM4", "3963373")
Set Data = x.getElementsByTagName("table")(4).getElementsByTagName("tr")(1).getElementsByTagName("td")
Debug.Print "Date: " & Split(Data(6).innerText, vbNewLine)(1)
Debug.Print "Status:" & Data(7).innerText
End Sub
你可以跳过表单直接进入结果页面,浏览器自动化在我使用它的时候从来没有这么好用过
以下函数与IEC、EDI和BillNumber一起提供时,将返回包含结果的HTMLDocument
下面的子主菜单将把所需数据打印到即时窗口。我不确定如何对函数的结果使用XPath,所以我只是硬编码了位置
Public Function GetDetail(ByVal IEC As String, ByVal EDI As String, ByVal ShippingBillNumber As String) As Object
Dim Request As Object: Set Request = CreateObject("MSXML2.serverXMLHTTP")
Dim Result As Object: Set Result = CreateObject("htmlfile")
Request.Open "POST", "http://dgftcom.nic.in/licasp/newsbdet.asp", False
Request.setRequestHeader "content-type", "application/x-www-form-urlencoded"
Request.send "D5=" & IEC & "&D8=" & EDI & "&T5=" & ShippingBillNumber & "&button1=SB-Detail"
Result.body.innerHTML = Request.responseText
Set GetDetail = Result
End Function
Sub Main()
Dim x As Object
Dim Data As Object
Set x = GetDetail("0392032449", "INBOM4", "3963373")
Set Data = x.getElementsByTagName("table")(4).getElementsByTagName("tr")(1).getElementsByTagName("td")
Debug.Print "Date: " & Split(Data(6).innerText, vbNewLine)(1)
Debug.Print "Status:" & Data(7).innerText
End Sub
上面的例子我什么都没有<代码>无装运清单详细信息,装运清单编号:3963373请检查港口代码/IEC/SB编号的正确性。
以上示例中,我没有得到任何信息<代码>无货运单详细信息可用于货运单编号:3963373请检查港口代码/IEC/SB编号的正确性。
现在我在039203249(IEC)编号、INRXLB(港口编号)、3953800(SB编号)中遇到了困难。在这里,我得到了“无货运信息”,代码卡在那里。它不会在excel的下一个单元格中搜索其他单元格。我必须使用“如果其他状态”吗?@AmitShah:检查是否有帮助。嘿,非常感谢,我也用同样的方式尝试过,而且成功了。现在我将尝试通过CSS选择器方法,这样整个过程会快得多。现在我在039203249(IEC)号、INRXLB(端口号)、3953800(SB号)中遇到困难。在这里,我得到了“没有可用的装运信息”,代码卡在那里。它不会在excel的下一个单元格中搜索其他单元格。我必须使用“如果其他状态”吗?@AmitShah:检查是否有帮助。嘿,非常感谢,我也用同样的方式尝试过,而且成功了。现在我将尝试使用CSS选择器方法,这样整个过程会快得多。这是一个很好的尝试,但我很少使用MSXML方法。这就是我要做的,但是,我再次发现添加Xpath或其他提取方法有困难,我肯定明天会尝试。非常感谢您的支持,晚安。这是一个很好的回答,但我很少使用MSXML方法。这就是我要做的,但是,我再次发现添加Xpath或其他提取方法有困难,我肯定明天会尝试。非常感谢你的支持,晚安。