#html #excel #vba #web-scraping
#HTML #преуспеть #vba #соскабливание полотна
Вопрос:
Я пытаюсь выполнить некоторую веб-очистку, чтобы получить таблицу данных.
Данные хранятся в консоли Google Play, поэтому для входа на веб-сайт вам потребуется учетная запись.
Мне удалось перейти на нужную страницу, но результаты таблицы хранятся в ежедневных показателях, и это, насколько я знаю, не может быть изменено.
Эта таблица по умолчанию выглядит следующим образом:
Я выделил красным цветом, в чем заключается моя проблема. Мне нужно щелкнуть по этому выпадающему списку и изменить значение на «Todo» (означает «Все«). Активация этой опции позволяет мне позже импортировать таблицу со всеми результатами, которые мне нужны.
ВАЖНО: По какой-либо причине, которую я не знаю (я не разработчик), названия классов элементов не совпадают, если вы посещаете веб-сайт с помощью Google Chrome или Internet Explorer. Я использую Internet Explorer 11, поэтому весь HTML-код, который я публикую, создан из-за этого.
Вернемся к выпадающему меню, и с помощью инструментов разработчика мне удалось получить эту информацию об этом выпадающем списке:
<div tabindex="0" class="OT1ABTB-Q-a OT1ABTB-P-h OT1ABTB-Yg-a" role="button" aria-expanded="false" aria-haspopup="true"><div class="OT1ABTB-Q-a OT1ABTB-P-i">6</div><div class="OT1ABTB-Q-a OT1ABTB-P-a"></div></div>
Кроме того, разместите изображение этой части кода с помощью инструментов разработки:
И теперь, соответствующая часть моего кода VBA:
Set objDivs = IEDoc.getElementsByClassName("OT1ABTB-N-d OT1ABTB-N-f OT1ABTB-N-a OT1ABTB-N-b")
For Each MiEle In objDivs(0).getElementsByTagName("div")
If MiEle.className = "OT1ABTB-Q-a OT1ABTB-P-a" Then
'code goes inside here, so I know I've grabbed the right DIV element. Just don't know what to do now
Stop
MiEle.Click 'this does not work
End If
Next MiEle
Stop
Я знаю, что могу выбрать нужный элемент DIV, но не знаю, как отобразить выпадающее меню, а затем выбрать 1 вариант.
ЕСЛИ вы сделаете это вручную, выпадающее меню будет выглядеть следующим образом:
Мне нужно выбрать опцию с надписью Todo.
Я заметил, что когда я нажимаю на него вручную, HTML-код изменяется, потому что свойство aria-expanded изменяется на True
, а затем HTML-код выглядит следующим образом:
<div tabindex="0" class="OT1ABTB-Q-a OT1ABTB-P-h OT1ABTB-Yg-a" role="button" aria-expanded="true" aria-haspopup="true" aria-activedescendant="gwt-uid-520"><div class="OT1ABTB-Q-a OT1ABTB-P-i">6</div><div class="OT1ABTB-Q-a OT1ABTB-P-a"></div></div>
Обратите внимание, что даже новое свойство называется aria-activedescendant="gwt-uid-520"
Итак, мне нужно изменить только это, чтобы таблица результатов показывала все.
Пожалуйста, если вам нужно больше HTML-кода или больше моего VBA-кода, просто попросите об этом. Я опубликовал не все, а только то, что, по моему мнению, важно, но если вам нужна дополнительная информация, просто попросите, и я с радостью ее опубликую.
Что касается ссылки на веб-сайт, как я уже сказал, это консоль Google Play, поэтому, боюсь, вам нужна учетная запись, но на всякий случай, это так:
Заранее спасибо.
Комментарии:
1. вы могли бы использовать execScript для добавления атрибута через javascript и изменения значения aria
2. Спасибо @QHarr. Не могли бы вы, пожалуйста, указать мне, как найти, какая функция вызывается для изменения значения? Как я могу увидеть это с помощью этих инструментов разработки?
3. Вы используете setAttribute для его изменения и removeAttribute для удаления. Это функции javascript, применяемые к документу ie.document.parentWindow.execScript «. querySelector(‘mySelector’).setAttribute(‘myattribute’,’myNewValue’); «и т. Д
4. Вам следует серьезно подумать об использовании python. Это будет намного проще реализовать, и если вы зашли так далеко, используя VBA, вам не составит труда переписать ваш код на python.
5. @Jane спасибо за ваше предложение, но, боюсь, я понятия не имею о python. Я всего лишь специалист по Excel и VBA среднего уровня. Нет других языков / знаний. (даже не HTML / Javascript или любой другой lol). В любом случае, изучение Python находится в моем списке дел .