Как вытащить детали атрибута из btnclass webscraping - PullRequest
2 голосов
/ 20 апреля 2019

В настоящее время я пытаюсь получить определенную информацию из элемента BTnClass на веб-странице.

конкретная кнопка и подробности предыдущего элемента:

<div class="m-t-sm">

<button class="btnLink " id="viewClientRecord_1-00001"
type="button" data-url="/?mtoken=itg999="><span class="text">View referral summary and client record
<span class="offscreen">&nbsp;for CLIENT NAME</span></span></button>

Я пытаюсьполучить данные для

data-url

Для дополнительной сложности существует 200 000 клиентских записей, и идентификатор класса Btn уникален для каждого клиента, поэтому я не могу полагаться на идентификатор для его работы (сказав, чтоЯ также попытался использовать ID и не смог.

Я пробовал следующие варианты:

Уникальный элемент

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementById("viewClientRecord_1-00001")(0).Children(0).getAttribute("data-url")(0).innerHTML

Верхний класс div

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("Cardf-row")(0).Children(0).getAttribute("data-url")(0).innerHTML

Предыдущий класс

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("m-t-sm")(0).Children(0).getAttribute("data-url")(0).innerHTML

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("m-t-sm")(0).getAttribute("data-url")(0).innerHTML

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("m-t-sm")(0).getAttribute("data-url").innerHTML

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("btnlink ")(0).getAttribute("data-url").innerHTML

Неважно, что я пытаюсь, я не могу получить getAttribute ("data-url"), чтобы взять что-нибудь: (

edit. Обновлено до GetElementsByClassName

1 Ответ

2 голосов
/ 20 апреля 2019

Хотя я не проверял вашу строку html.getElementById("viewClientRecord_1-00001")(0).Children(0), я предполагаю, что она правильная, за исключением номера индекса, который недопустим для .getElementByID().

Функция .getAttribute() не возвращает коллекцию. Если бы это было так, оно, вероятно, следовало бы остальным правилам именования HTMLDocument и добавило бы s, чтобы сделать его .getAttributes(). Это означает, что вы не можете добавить к нему индексный номер, как вы это сделали с .getAttribute("data-url")(0).

Также getAttribute() возвращает строку. Строки не содержат свойства .innerText. Вам нужно удалить .innerText и просто вернуть результат из функции getAttribute. Это приводит вас к окончательному результату:

Sheets("Results").Range("A" & ClientRowNumber).Value = _
     html.getElementById("viewClientRecord_1-00001").Children(0).getAttribute("data-url")
...