Как очистить текст из всплывающих подсказок, созданных с помощью javascript - PullRequest
0 голосов
/ 03 февраля 2020

Я написал следующий код, чтобы получить позиции всех синих маркеров на карте.

from bs4 import BeautifulSoup
from requests_html import HTMLSession
session = HTMLSession()

url="https://emf2.bundesnetzagentur.de/karte/Default.aspx?lat=52.4107723&lon=14.2930953&zoom=14"
r = session.get(url)
r.html.render(sleep = 3)
data = r.html.html

soup=BeautifulSoup(data,'html.parser')
BlueTriangles = soup.find_all(src="images/funk_hf.png")
for Triangle in BlueTriangles[1:]:
    TriangleStyle = Triangle['style']
    PixelPosition = TriangleStyle.split('transform: translate3d(')[1].split(', 0px); z')[0]
    print(PixelPosition)

r.session.close()

Когда я открываю URL с помощью веб-браузера, я вижу, что каждый синий маркер имеет уникальный Идентификатор, который отображается во всплывающей подсказке при наведении мыши:

enter image description here

Код подсказки html, по-видимому, отображается при срабатывании события наведения мыши:

enter image description here

Можно ли как-нибудь удалить идентификатор из всплывающей подсказки? Мне было интересно, возможно ли использовать параметр сценария рендера, чтобы вызвать событие наведения мыши. Но я не смог найти способ интегрировать его в код:

$('#foo').trigger('mouseover');

1 Ответ

2 голосов
/ 03 февраля 2020

Точки на карте отображаются по запросу конечной точки https://emf2.bundesnetzagentur.de/karte/Standortservice.asmx/GetStandorteFreigabe с координатами поля (в данном случае {"Box":{"sued":52.39231101879802,"west":14.248666763305664,"nord":52.42927461241364,"ost":14.337587356567385}}).

Ответ - json. Данные местоположения зашифрованы AES. Код расшифровки доступен при загрузке скрипта js со страницей (функции CryptParams и DecryptData ).

После дешифрования мы получаем эти хорошие данные: "[{"Titel":"018126","Lng":14.311666,"Lat":52.428888,"fID":1076,"sonderseite":false},{"Titel":"011720","Lng":14.259722,"Lat":52.423054,"fID":2196,"sonderseite":false},{"Titel":"87011082","Lng":14.275832,"Lat":52.401666,"fID":560919,"sonderseite":false}]"

У вас есть два пути.

  1. Используйте селен или подобное программное обеспечение для рендеринга JS и попробуйте проанализировать полученный DOM;

  2. Напишите синтаксический анализатор для отправки запроса в конечную точку GetStandorteFreigabe и расшифруйте его ответ (преобразовать код из js в python),

...