Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
當(dāng)今的互聯(lián)網(wǎng)時(shí)代,位置信息變得越來越重要,它能夠幫助提供個(gè)性化的用戶體驗(yàn),例如根據(jù)用戶的位置推薦附近的餐廳、商店或是導(dǎo)航服務(wù)。HTML5引入了Geolocation API,這使得獲取用戶的地理位置信息變得可能,同時(shí)也帶來了隱私方面的考慮。本文將介紹Geolocation API的基本用法,并提供幾個(gè)實(shí)際的例子。
Geolocation API允許網(wǎng)頁獲取用戶的當(dāng)前位置信息。這個(gè)API是基于用戶的同意的,也就是說,用戶必須授權(quán)網(wǎng)頁才能獲取位置信息。一旦授權(quán),網(wǎng)頁就可以訪問用戶的經(jīng)緯度坐標(biāo)。
這個(gè)API提供了幾個(gè)關(guān)鍵的方法:
下面是一個(gè)簡單的例子,展示了如何使用getCurrentPosition()方法獲取用戶的當(dāng)前位置信息。
<!DOCTYPE html>
<html>
<head>
<title>Geolocation API 示例</title>
</head>
<body>
<button onclick="getLocation()">獲取我的位置</button>
<p id="location">位置信息將顯示在這里</p>
<script>
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError);
} else {
document.getElementById('location').innerHTML = "抱歉,您的瀏覽器不支持地理定位。";
}
}
function showPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
document.getElementById('location').innerHTML = "緯度: " + latitude +
"<br>經(jīng)度: " + longitude;
}
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
document.getElementById('location').innerHTML = "用戶拒絕了地理定位請求。"
break;
case error.POSITION_UNAVAILABLE:
document.getElementById('location').innerHTML = "位置信息不可用。"
break;
case error.TIMEOUT:
document.getElementById('location').innerHTML = "請求用戶地理位置超時(shí)。"
break;
case error.UNKNOWN_ERROR:
document.getElementById('location').innerHTML = "發(fā)生未知錯(cuò)誤。"
break;
}
}
</script>
</body>
</html>
在上面的代碼中,當(dāng)用戶點(diǎn)擊按鈕時(shí),getLocation()函數(shù)會(huì)被調(diào)用。如果瀏覽器支持Geolocation API,它會(huì)嘗試獲取用戶的當(dāng)前位置。獲取成功后,會(huì)調(diào)用showPosition()函數(shù)顯示位置信息;如果出現(xiàn)錯(cuò)誤,則會(huì)調(diào)用showError()函數(shù)顯示錯(cuò)誤信息。
在一些應(yīng)用場景中,我們可能需要實(shí)時(shí)監(jiān)控用戶位置的變化,例如在地圖導(dǎo)航中。下面的例子展示了如何使用watchPosition()方法來實(shí)現(xiàn)這一功能。
<!DOCTYPE html>
<html>
<head>
<title>Geolocation API 示例</title>
</head>
<body>
<button onclick="watchMyLocation()">監(jiān)控我的位置</button>
<button onclick="stopWatching()">停止監(jiān)控</button>
<p id="location">位置信息將顯示在這里</p>
<script>
var watchID;
function watchMyLocation() {
if (navigator.geolocation) {
watchID = navigator.geolocation.watchPosition(showPosition, showError);
} else {
document.getElementById('location').innerHTML = "抱歉,您的瀏覽器不支持地理定位。";
}
}
function stopWatching() {
if (watchID) {
navigator.geolocation.clearWatch(watchID);
watchID = null;
document.getElementById('location').innerHTML = "位置監(jiān)控已停止。";
}
}
function showPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
document.getElementById('location').innerHTML = "緯度: " + latitude +
"<br>經(jīng)度: " + longitude;
}
function showError(error) {
// 可以復(fù)用上一個(gè)示例中的showError函數(shù)
}
</script>
</body>
</html>
在這個(gè)例子中,用戶可以通過點(diǎn)擊按鈕來開始或停止監(jiān)控他們的位置。watchPosition()方法會(huì)返回一個(gè)ID,這個(gè)ID可以用來通過clearWatch()方法停止監(jiān)控。
Geolocation API為前端開發(fā)者提供了一種方便的方式來獲取和監(jiān)控用戶的地理位置信息,從而可以構(gòu)建更加智能和個(gè)性化的web應(yīng)用。然而,使用這一功能時(shí)必須考慮到用戶隱私的保護(hù),確保在獲取位置信息前得到用戶的明確授權(quán),并在應(yīng)用中明確告知用戶位置信息的使用目的和范圍。
Geolocation(地理定位)
基本內(nèi)容
目前定位技術(shù)
GPS - 美國的技術(shù)(經(jīng)度和緯度),GPS衛(wèi)星
專利費(fèi)用,安全性
北斗定位 - 中國全自主
最初定位 - 軍事化使用(慣性定位)
民用 - 增加衛(wèi)星定位
物聯(lián)網(wǎng)
車聯(lián)網(wǎng)
基站定位
IP地址
HTML5中沒有專屬的定位技術(shù)
定位技術(shù)是由Goggle公司提供的(GoggleMap)
百度地圖
百度地圖的使用
地址 - http://developer.baidu.com/map/
注冊百度開發(fā)者
如何創(chuàng)建應(yīng)用
應(yīng)用類型 - 服務(wù)器
啟用服務(wù) - 默認(rèn)全部啟用
請求校驗(yàn)方式 - IP白名單校驗(yàn)
IP白名單 - 0.0.0.0/0
得到應(yīng)用的秘鑰
百度地圖
百度地圖 - 類參考
百度地圖 - Demo示例
使用百度地圖的步驟
HTML頁面
引入百度地圖的JS文件
http://api.map.baidu.com/api?v=2.0&ak=您的密鑰
定義容器元素 - 用于顯示百度地圖
<div></div>
JavaScript
創(chuàng)建百度地圖的Map對(duì)象
new BMap.Map(容器的ID);
設(shè)置百度地圖的中心和顯示級(jí)別
centerAndZoom(center,zoom)
center - 設(shè)置地圖的中心位置(String)
zoom - 設(shè)置地圖的顯示級(jí)別(3 - 19)
一節(jié),我們介紹一下頁面元素定位的八種方式和如何通過火狐和谷歌瀏覽器獲取元素定位信息.
html頁面是有一個(gè)個(gè)的標(biāo)簽組成的,我們定位元素其實(shí)就是定位這些標(biāo)簽。
首先來看一下有哪兒幾種定位方式:
id
name
class name
tag name
link text
partial link text
xpath
css selector
一共八種定位方式,其實(shí)常用的定位方式也有:xpath、css selector,至少要熟練掌握一種......
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_id("wd1").send_keys("python")
id定位
代碼的意思就是定位id為:“wd1”的輸入框并輸入了“python”這個(gè)數(shù)據(jù)
<input id="wd1" class="search_ipt search_inp_border j_search_input tb_header_search_input" name="kw1" value="" autocomplete="off" size="42" tabindex="1" maxlength="100" x-webkit-grammar="builtin:search" x-webkit-speech="true" type="text">
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_name("kw1").send_keys("python")
我們通過觀察這個(gè)<input>標(biāo)簽的屬性,通過name也可以成功定位這個(gè)元素
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_class_name("search_ipt.search_inp_border.j_search_input.tb_header_search_input").send_keys("python")
結(jié)果我們發(fā)現(xiàn)系統(tǒng)報(bào)錯(cuò)了,由于這個(gè)輸入框的class中有四個(gè)class,
所以當(dāng)我們同點(diǎn)來分割時(shí),報(bào)錯(cuò):Unable to locate element:;當(dāng)我們用空格分割時(shí),報(bào)錯(cuò): Compound class names not permitted
而當(dāng)我們用其中一個(gè)class時(shí),比如:search_ipt
這時(shí)我們才可以成功的定位元素(一般不建議用這個(gè)class name來定位)
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_tag_name("input").send_keys("python")
我們直接定位這個(gè)元素的標(biāo)簽名,可以成功定位,但是由于實(shí)際中tag name有很多相同的標(biāo)簽,可能會(huì)在運(yùn)行時(shí)定位不準(zhǔn)確,所以不建議使用這個(gè)
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_link_text("地圖").click()
然后我們通過鏈接的名字找到元素,并進(jìn)行click()點(diǎn)擊操作,進(jìn)入到了地圖頁
第6種:Partial link text定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_partial_link_text("地").click()
同樣的,我們通過鏈接的部分文字信息來定位到這個(gè)元素,依舊可以成功定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_xpath(".//*[@id='wd1']").send_keys("python")
xpath定位
xpath是比較常用的定位,由于定位比較準(zhǔn)確,一般是百發(fā)百中,但是缺點(diǎn)是絕對(duì)路徑的xpath根據(jù)元素標(biāo)簽的相對(duì)位置來定位,如果頁面的UI元素有所改動(dòng),結(jié)構(gòu)路徑變化的話,也會(huì)導(dǎo)致我們無法定位元素,不過這是針對(duì)我們用firepath自動(dòng)獲取時(shí)的定位,我們完全可以根據(jù)層級(jí)關(guān)系和元素屬性自己來寫xpath路徑,這樣的話,即使其他路徑結(jié)構(gòu)變化,對(duì)于xpath定位的準(zhǔn)確度還有一定的保障
比如:
1.我們把xpath的父級(jí)路徑添加上
//form/input[@id='wd1']
2.我們還可以對(duì)所查找元素標(biāo)簽里的屬性進(jìn)行組合
//form/input[@id='wd1' and @name='kw1']
3.我們對(duì)文本進(jìn)行匹配
driver.find_element_by_xpath("//*[contains(text(),'網(wǎng)頁')]").click()
可以看出xpath簡直是神器啊,有沒有,可以通過標(biāo)簽的各種屬性來定位,等于說是包含了class name、name、id、link_text這些定位的方法。
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_css_selector("#wd1").send_keys("python")
通過css selector 定位
其實(shí)這個(gè)css selector定位的強(qiáng)悍和xpath不相上下,也非常之強(qiáng)大,比如在css selector里:
我用class來定位:driver.find_element_by_css_selector(".search_ipt")
用id來定位:driver.find_element_by_css_selector("#wd1")
用標(biāo)簽名來定位(tag name):driver.find_element_by_css_selector("input")
用父子關(guān)系來定位:driver.find_element_by_css_selector("form>input")
用標(biāo)簽和屬性來定位:driver.find_element_by_css_selector("input[id='wd1']")
以及綜合上邊的超級(jí)組合查詢:driver.find_element_by_css_selector("form.clearfix>input[id='wd1']") #代表著class為clearfix的父級(jí)標(biāo)簽和自己id屬性為wd1的input標(biāo)簽.
這些就是定位元素的方法,很常用也非常重要,值得收藏!
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。