Очистка веб-страниц VBA: нажмите на выпадающее меню с кликами (не при наведении курсора мыши)

#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, поэтому, боюсь, вам нужна учетная запись, но на всякий случай, это так:

https://play.google.com/apps/publish/?amp;account=YOURACCOUNTNUMBERr#StatisticsPlace:p=YOURAPPNAMEamp;statms=DAILY_USER_UNINSTALLSamp;statgs=DAILYamp;statd=OS_VERSIONamp;statc=falseamp;dvals=@OVERALL@amp;statdr=20181011-20190318amp;statcdr=20181011-20190318

Заранее спасибо.

Комментарии:

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 находится в моем списке дел .