Невозможно ввести данные из списка в Excel через Селен VBA - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть этот веб-сайт "http://dgftcom.nic.in/licasp/sbdetformnew.asp", где мне нужно ввести код IEC - для которого у меня есть разные порты на выбор (это где я нахожусь в затруднении), а затем необходимо ввести накладную на доставку (снова взято из Excel)

IEC Код

  • 0392032449

  • 0392032449

    Порт

  • INBOM4 (Bombay Air Car go)

  • INNGP6 Нагпур

Счет за доставку №

  • 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

В конечном итоге мне нужно извлечь "Номер файла и дату" и "Статус" . Пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Вы можете пропустить форму и go прямо на страницу результатов, когда я ее использую, автоматизация браузера никогда не работала так хорошо.

Следующая функция, когда предоставляется IEC, EDI и BillNumber вернут HTMLDocument, содержащий результат.

Ниже Sub Main выведет необходимые данные в ближайшее окно. Я не уверен, как использовать 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
1 голос
/ 23 апреля 2020

Попробуйте выбрать ниже 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...