Запросы Python: отправлять команды JavaScript

#javascript #python #python-3.x #web-scraping #python-requests

#javascript #python #python-3.x #очистка веб-страниц #python-запросы

Вопрос:

Я пытаюсь получить содержимое сайта, но это содержимое появляется только тогда, когда я нажимаю ссылку «Диаграмма», которая представляет собой команду JavaScript, подобную этой:

 javascript:__doPostBack(amp;#39;fcc1$dgrC$ctl02$ctl00amp;#39;,amp;#39;amp;#39;
  

из элемента, подобного этому:

 <a href="javascript:__doPostBack(amp;#39;fcc1$dgrC$ctl02$ctl00amp;#39;,amp;#39;amp;#39;)">Chart</a>
  

Это сайт:
введите описание изображения здесь

И это то, что происходит, когда вы нажимаете на «Диаграмму»:
введите описание изображения здесь

Вы можете видеть, что ссылка не меняется, поэтому единственный способ получить код диаграммы — каким-то образом отправить эту команду JavaScript

Как найти все ссылки на диаграмму?
Как я могу выполнить «виртуальный щелчок» по ссылкам на диаграмму?
И после этого, как получить новый html?

Я действительно ценю вашу помощь!

Ответ №1:

doPostBack просто устанавливает поля формы __EVENTTARGET и __EVENTARGUMENT и отправляет форму. Кстати, это просто кавычки.

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

1. Что? И как мне использовать запросы для этого?

2. Это запрос POST. Установите __EVENTTARGET в fcc1$ dgrC $ctl02 $ctl00 и __EVENTARGUMENT в пустую строку

Ответ №2:

Если слушатели javascript действительно «нажимают» на эти ссылки, у вас могут возникнуть проблемы с поиском реальной ссылки для нажатия.

Вместо этого вы могли бы использовать инструмент для имитации веб-браузера на python и «щелкнуть» по этой ссылке, чтобы перейти к следующей странице. Лучшее, что я использовал, — это Mechanical Soup: https://mechanicalsoup.readthedocs.io/en/stable/introduction.html .

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

1. Привет, Викас, спасибо за предложение! Ссылка «Диаграмма» имеет шаблон:

2. Первое равно 1, второе 2

3. <a href=»javascript:__doPostBack(amp;#39;fcc1$dgrC$ctl0(((((2)))))$ ctl00amp;#39;,amp;#39;amp;#39;)»> Диаграмма</a>

4. <a href=»javascript:__doPostBack(amp;#39;fcc1$dgrC$ctl0(((((3)))))$ ctl00amp;#39;,amp;#39;amp;#39;)»> Диаграмма</a>

5. Как мне теперь имитировать этот щелчок?