не в состоянии переключаться между вкладками в chrome с помощью селена VBA - PullRequest
0 голосов
/ 26 апреля 2020

Привет Я обнаружил трудности при переключении между вкладками в chrome кодировании селена VBA. У меня есть этот веб-сайт: http://dgftebrc.nic.in: 8100 / BRCQueryTrade / index. jsp Где мне нужно ввести IEC Код: 0906008051 Счет для доставки №:

  1. 3929815
  2. 3953913
  3. 3979509

И затем введите код с картинки (это я могу сделать, дав пользователю 10 секунд время) После всего этого мне нужно нажать «Показать подробности» (нажав Ctrl), чтобы он открылся на следующей вкладке, а затем скопировать определенные данные c из этой вкладки и затем закрыть их. Затем из листа 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

Пожалуйста, посмотрите на это и помогите меня.

Спасибо.

1 Ответ

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

XMLHTTP-запрос:

Я хотел бы отойти от этого и избежать дополнительных затрат на использование браузера.

Сделать первоначальный запрос GET xhr к http://dgftebrc.nic.in:8100/BRCQueryTrade/brcIssuedTrade.jsp и извлеките JSESSION cook ie (вы, вероятно, можете использовать .getResponseHeader("Set-Cookie")), затем сделайте последующий запрос POST xhr к тому же URL, но предоставьте cook ie в заголовках запроса и в теле, чтобы убедиться, что вы передаете соответствующий параметр значения.

Требуемые значения параметров:

data = {
  'iec': '0906008051',
  'sno': '3929815',
  'billid': '',
  'brcstat': 'A',
  'captext': 'a7m3p',
  'B1': 'Show Details'
}

В VBA тело POST для .send body будет выглядеть следующим образом:

"iec=0906008051&sno=3929815&billid&brcstat=A&captext=a7m3p&B1=Show Details"

Где iec и sno являются динамическими c, и вы бы объединяли в тело каждого запроса, возможно, в oop.

"iec=" & iec & "&sno=" & sno & "&billid&brcstat=A&captext=" & capText & "=Show Details"

Если капча меняется, вы можете предложить пользователю ввести значение для captext param и передать его в теле.

Не думайте, что вам нужно больше Заголовки требуются, хотя вы можете добавить user-agent

например

.setRequestHeader "User-Agent" , "Mozilla/5.0"

Подробнее о запросах xmlhttp (XHR) здесь или Google (введите следующее в поиске bar vba jsession cookie и нажмите enter).

Ответ на запрос POST будет содержать html, в котором находятся желаемые таблицы.


Selenium :

Если вы хотите sh продолжить работу с Selenium и предположить, что вы включили кнопку Show Details с вашими предыдущими действиями, вы можете использовать следующий атрибут = селектор значений:

bot.FindElementByCss("[value='Show Details']").click
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...