Извлечение данных с конечной страницы результатов с использованием Selenium и VBA - PullRequest
0 голосов
/ 16 апреля 2020

Я работаю над автоматизацией веб-сайта, чтобы превзойти копирование-вставку. Веб-сайт здесь является правительственным веб-сайтом, поэтому немного сложен в обращении. У меня проблема с извлечением данных с этого веб-сайта: http://nhb.gov.in/IndexPage.aspx?enc=nRXYbvwNFTF218kodGo9fg==

Несколько кодов проекта для тестирования:

  • 37TTG0000170
  • 28AAP0023256
  • 23MP0006837
  • 23AMP0006839

У меня есть список кодов проекта, который следует взять из файла Excel, вставленного в веб-сайт, а затем нажмите кнопку «Подтвердить».

Затем на следующей странице тот же код проекта будет связан с гиперссылкой, которая при нажатии приводит нас к нашей странице результатов с информацией о проекте, которую нужно извлечь и вставить в лист Excel рядом с соответствующим кодом проекта, таким как эти таблицы и данные. (Это более поздняя часть, которая может быть изменена).

Я достиг последней страницы результатов, но мне трудно извлечь из нее материал .

Option Explicit

Public Sub NHBsite()

 Dim bot As WebDriver, Cell As Range
'Dim ws As Worksheet
'Dim rng as Range
 Dim count As Long

Const URL As String = "http://nhb.gov.in/IndexPage.aspx?enc=nRXYbvwNFTF218kodGo9fg=="

Set bot = New ChromeDriver
'Set ws = ThisWorkbook.Worksheets("Data")
'Set rng = ws.Range(ws.Range("A2"), ws.Range("A2").End(xlDown))

'bot.Window.Maximize

'For Each Cell In rng
count = 1

While (Len(Range("A" & count)) > 0)

bot.Get URL

bot.FindElementById("ctl00_ContentPlaceHolder1_ctl00_txtProjectCode").SendKeys 
Range("A" & count)
bot.FindElementById("ctl00_ContentPlaceHolder1_ctl00_btnSearchProject").Click 
     bot.FindElementById("ctl00_ContentPlaceHolder1_ctl00_gvSerachDetails_ctl02_lblProjectCode").Click

Range("B" & count) = bot.FindElementById("Table5").Text

 count = count + 1

Wend

'bot.Wait 1000
'bot.TakeScreenshot.SaveAs (ThisWorkbook.Path + "/Screenshot_" + Cell.Value + 
".jpg")
 'Next

bot.Quit  

End Sub

1 Ответ

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

Вы можете использовать встроенный метод селена для работы с таблицами. Вам нужно будет уже обработать случай, когда результаты не найдены (в этом случае вы не вернетесь назад, поскольку не оставили бы исходную страницу); только если есть таблица результатов, вы можете сделать

bot.FindElementById("ctl00_ContentPlaceHolder1_ctl00_gvSerachDetails").AsTable.ToExcel ws.Range("where ever you want table to go")

Это создает новую проблему. Ваши данные упорядочены по коду для каждой строки, но результаты могут вернуться с несколькими строками (вам необходимо это определить). Один из способов справиться с этим - создать новый лист в ячейке l oop over в rng и использовать имя ячейки для имени листа; затем вставьте полученную таблицу в этот новый лист. Если может быть только одна строка, тогда вместо этого используйте FindElementsByCss("#ctl00_ContentPlaceHolder1_ctl00_gvSerachDetails tr:nth-of-type(2) td") и For Each l oop этой коллекции и запишите столбец. Используйте счетчик строк для увеличения строки для записи при каждом изменении кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...