Вы можете сделать запрос POST
import requests
from bs4 import BeautifulSoup as bs
import re
url = 'https://www.latlong.net/'
locations = ['Republic of the Philippines', 'Heaven', 'Philippines']
latitude = []
longitude = []
with requests.Session() as sess:
for i in locations:
r = sess.get(url)
soup = bs(r.content, 'lxml')
token = soup.select_one('#lltoken')['value']
data = { 'place': i, 'lltoken': token }
r = sess.post(url, data = data)
s = r.text
try:
lat_lon = re.findall( r'sm\((-?\d+\.\d+),(-?\d+\.\d+)', s)[0]
lat = lat_lon[0]
lon = lat_lon[1]
latitude.append(lat)
longitude.append(lon)
except:
print(s)
print(latitude)
print(longitude)
Селен:
Вы можете взять их из источника карты iframe. Кажется, что нет необходимости в условиях ожидания, но вам, возможно, придется рассмотреть возможность их добавления (или я с удовольствием добавлю, чтобы показать вам)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import re
locations = [
'Republic of the Philippines',
'Heaven',
'Philippines',
]
latitude = []
longitude = []
url = 'https://www.latlong.net/'
browser = webdriver.Chrome()
browser.get(url)
for i in locations:
bar = browser.find_element_by_id('place')
bar.clear()
bar.send_keys(i)
bar.send_keys(Keys.ENTER)
s = browser.find_element_by_id('latlongmape').get_attribute('src')
lat_lon = re.findall( r'(-?\d+\.\d+)', s)
lat = lat_lon[0]
lon = lat_lon[1]
latitude.append(lat)
longitude.append(lon)
print(latitude)
print(longitude)
browser.quit()
Условия ожидания с использованием другого элемента для источника:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import re
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
locations = [
'Republic of the Philippines',
'Heaven',
'Philippines',
]
latitude = []
longitude = []
url = 'https://www.latlong.net/'
browser = webdriver.Chrome()
browser.get(url)
for i in locations:
bar = WebDriverWait(browser,5).until(EC.presence_of_element_located((By.ID, "place")))
bar.clear()
bar.send_keys(i)
bar.send_keys(Keys.ENTER)
s = WebDriverWait(browser,5).until(EC.presence_of_element_located((By.ID, "coordinateslink"))).text
lat_lon = re.findall( r'(-?\d+\.\d+)', s)
lat = lat_lon[0]
lon = lat_lon[1]
latitude.append(lat)
longitude.append(lon)
print(latitude)
print(longitude)
browser.quit()
Вы также можете использовать JavaScript для возврата значений:
lat = browser.execute_script("return document.getElementById('lat').value;")
lon = browser.execute_script("return document.getElementById('lng').value;")
Вы также можете найти выражение в одном из тегов сценария:
lat_lon = re.findall( r'sm\((-?\d+\.\d+),(-?\d+\.\d+)', browser.page_source)[0]
lat = lat_lon[0]
lon = lat_lon[1]
print(lat, lon)
Места, где найдены значения:
Вы можете видеть все различные места, где javascript назначает значения координат в сценарии, который имеет следующий js:
<script>
var mymap = L.map('latlongmap');
var mmr = L.marker([0,0]);
mmr.bindPopup('0,0');
mmr.addTo(mymap);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar',
attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'}).addTo(mymap);
mymap.on('click', onMapClick);
sm(14.693390,121.067238,12)
function isll(num) {
var val = parseFloat(num);
if (!isNaN(val) && val <= 90 && val >= -90)
return true;
else
return false;
}
function onMapClick(e) {
mmr.setLatLng(e.latlng);
setui(e.latlng.lat,e.latlng.lng,mymap.getZoom());
}
function dec2dms(e,t) {
document.getElementById("dms-lat").innerHTML = getdms(e, !0), document.getElementById("dms-lng").innerHTML = getdms(t, !1)
}
function getdms(e, t) {
var n = 0, m = 0, l = 0, a = "X";
return a = t && 0 > e ? "S" : !t && 0 > e ? "W" : t ? "N" : "E", d = Math.abs(e), n = Math.floor(d), l = 3600 * (d - n), m = Math.floor(l / 60), l = Math.round(1e4 * (l - 60 * m)) / 1e4, n + "° " + m + "' " + l + "'' " + a
}
function sm(lt,ln,zm) {
setui(lt,ln,zm);
mmr.setLatLng(L.latLng(lt,ln));
mymap.setView([lt,ln], zm);
}
function setui(lt,ln,zm) {
lt = Number(lt).toFixed(6);
ln = Number(ln).toFixed(6);
mmr.setPopupContent(lt + ',' + ln).openPopup();
document.getElementById("lat").value=lt;
document.getElementById("lng").value=ln;
document.getElementById("latlngspan").innerHTML ="(" + lt + ", " + ln + ")";
document.getElementById("coordinatesurl").value = "https://www.latlong.net/c/?lat=" + lt + "&long=" + ln;
document.getElementById("coordinateslink").innerHTML = '<a href="https://www.latlong.net/c/?lat=' + lt + "&long=" + ln + '" target="_blank">(' + lt + ", " + ln + ")</a>";
dec2dms(lt,ln);
document.getElementById('latlongmape').src='https://www.google.com/maps/embed/v1/view?key=AIzaSyALrSTy6NpqdhIOUs3IQMfvjh71td2suzY&maptype=satellite&'+'center='+lt+','+ ln+'&zoom='+zm;
}
</script>