Веб Соскребание изображения с интерактивной веб-карты - PullRequest
0 голосов
/ 21 декабря 2018

Мне нужно извлечь компонент карты в статическое изображение из: http://www.bom.gov.au/water/landscape/#/sm/Relative/day/-35.30/145.17/5/Point////2018/12/16/

Эта страница содержит интерактивную веб-карту на основе листовок, в которой данные слоя ежедневно обновляются с помощью веб-картографических сервисов.Извлеченное изображение должно содержать все слои, загруженные на карту.

Это также необходимо автоматизировать, чтобы никто не открывал веб-браузер и не переходил по URL-адресу.Извлеченное изображение пойдет в документ Word.

Я программист на Python и nodejs, но я не могу этого сделать с помощью BeautifulSoup для Python или Cheerio для nodejs для просмотра веб-страниц, поскольку карта не является элементом img, нонесколько динамических DIV.Как взять композицию карты как изображение?

1 Ответ

0 голосов
/ 21 декабря 2018

Вы можете использовать:

from PIL import Image
from selenium import webdriver

driver = webdriver.Firefox()
driver.maximize_window() # maximize window
driver.get("http://www.bom.gov.au/water/landscape/#/sm/Relative/day/-35.30/145.17/5/Point////2018/12/16/")
element = driver.find_element_by_xpath("//*[@id=\"mapid\"]"); # this is the map xpath
location = element.location;
size = element.size;
driver.save_screenshot("canvas.png");
x = location['x'];
y = location['y'];
width = location['x']+size['width'];
height = location['y']+size['height'];
im = Image.open('canvas.png')
im = im.crop((int(x), int(y), int(width), int(height)))
im.save('canvas_el.png') # your file

Если вам нужно зациклить каждый слой, используйте следующий код:

from time import sleep
driver.find_elements_by_class_name("leaflet-control-layers-toggle")[0].click(); # make layer selector visible
layers = driver.find_elements_by_class_name("leaflet-control-layers-selector"); # select each layer and wait 5seconds
for layer in layers:
    layer.click()
    sleep(5)
    # you can also capture screenshots here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...