Python+Selenium實現(xiàn)在Geoserver批量發(fā)布Mongo矢量數(shù)據(jù)
首先,聲明一下,這里我完成的腳步屬于半自動化的,我戲稱它為“有監(jiān)督的半自動化”腳本。具體原因后面會詳細說明。
一、安裝 Selenium和ChromeDriver
安裝Selenium:
pip install selenium
安裝ChromeDriver
ChromeDriver下載地址: chromedirver.
注意:下載的版本號要和自己Chrome版本號一樣
二、安裝Geoserver必要插件
注意:安裝的geoserver插件版本要和安裝的geoserver版本號完全一致,否則會報錯
1.安裝Mongodb插件:
以我的本地geoserver版本為例:
解壓后得到的jar文件
將得到的jar文件粘貼到這里,重啟tomcat服務(wù)器即可安裝
2.安裝矢量插件
這是從官網(wǎng)插件下載后的并且解壓后的樣子,安裝方式同Mongo插件一樣
三、關(guān)于Selenium中XPath的使用技巧
1.在要操作的網(wǎng)站按F12打開Chrome的調(diào)試工具,選擇元素選擇工具,如下圖所示:
2.選擇你要操作的元素,如下所示:在這里插入圖片描述
3.右鍵Copy,選擇復制完整的XPath路徑,這樣就可以精準的引用到代碼中了。
四、腳本編寫
完整代碼如下:
from selenium import webdriver from selenium.webdriver.support.ui import Select import time count = 0 # 用于統(tǒng)計帶發(fā)布圖層個數(shù) wd = webdriver.Chrome() wd.implicitly_wait(5) # 隱藏式等待 wd.get('http://localhost:8080/geoserver/web/') # 鏈接本地的geoserver wd.find_element_by_id("username").send_keys("admin") # 填入用戶名 wd.find_element_by_id("password").send_keys("geoserver") # 填入密碼 wd.find_element_by_css_selector(".positive").click() time.sleep(1) wd.find_element_by_xpath('//*[@id="navigation"]/li[2]/ul/li[4]/a/span').click() # 選擇圖層頁 time.sleep(1) wd.find_element_by_xpath('//*[@id="page"]/div[1]/div[2]/ul/li[1]/a').click() # 新建圖層 time.sleep(1) select = Select(wd.find_element_by_css_selector(".select2-hidden-accessible")) # 選擇工作區(qū) time.sleep(1) select.select_by_index(4) # 這里數(shù)字根據(jù)需求自行調(diào)整 elements = wd.find_elements_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div/div[2]/div/table/tbody/tr[*]/td[2]/span') # 統(tǒng)計MongoDB中待發(fā)布的圖層個數(shù) for element in elements: print(element.text) count = count + 1 print(count) wd.find_element_by_xpath('//*[@id="navigation"]/li[2]/ul/li[4]/a/span').click() # 退回到圖層頁 for i in range(1, count): #這里的count可以不用,直接自己指定范圍 wd.find_element_by_xpath('//*[@id="page"]/div[1]/div[2]/ul/li[1]/a').click() # 新建圖層 time.sleep(1) select = Select(wd.find_element_by_css_selector(".select2-hidden-accessible")) # 選擇工作區(qū) time.sleep(1) select.select_by_index(14) # 這里數(shù)字根據(jù)需求自行調(diào)整 time.sleep(1) wd.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div/div[2]/div/table/tbody/tr['+ str(i) + ']/td[3]/span/a/span').click() # 點擊進入發(fā)布配置 time.sleep(1) wd.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div[1]/div/ul/div/li[2]/fieldset/ul/li[1]/div[2]/a[1]').click() # 選擇范圍 time.sleep(6) wd.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div[1]/div/ul/div/li[2]/fieldset/ul/li[2]/a').click()# 選擇范圍 time.sleep(6) wd.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[1]/ul/li[4]/a/span').click() # 切換到title cacheing time.sleep(1) wd.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div/fieldset/ul/li[2]/div/ul/li[6]/div[1]/input").click() # 點擊需要添加的矢量切片 # time.sleep(1) wd.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div/fieldset/ul/li[2]/div/ul/li[6]/div[2]/input").click() # 點擊需要添加的矢量切片 # time.sleep(1) wd.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div/fieldset/ul/li[2]/div/ul/li[6]/div[3]/input").click() # 點擊需要添加的矢量切片 # time.sleep(1) wd.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div/fieldset/ul/li[2]/div/ul/li[6]/div[4]/input").click() # 點擊需要添加的矢量切片 # time.sleep(1) wd.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div/fieldset/ul/li[2]/div/ul/li[7]/input").send_keys(10) # 添加時長 # time.sleep(1) wd.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/form/div[2]/div[2]/div/fieldset/ul/li[2]/div/ul/li[8]/input").send_keys(10) # 添加時長 # time.sleep(1) wd.find_element_by_css_selector("#page div.button-group.selfclear > a:nth-child(1)").click() time.sleep(1)
解釋一下:代碼中出現(xiàn)了time.sleep(6),6秒,大家可能會覺得等待的時間有些長,但是這是博主在實踐中覺得可行的時間。因為有的地方數(shù)據(jù)量太大,geoserver計算邊框時會耗時較長,導致崩潰,如果大家的數(shù)據(jù)量較小,則可以把,這里的時間調(diào)小,或者沒有。
這里Mongon的鏈接之類的工作都是在,之前手動操作的,沒有做自動化,畢竟也沒有多少,這就是半自動化,而監(jiān)督是腳本執(zhí)行過程中如果還是避免不了,計算時間過長,則相應(yīng)圖層手動發(fā)布,之后的調(diào)整代碼for循環(huán)的range后再次執(zhí)行即可。
再給大家曬一下geoserver計算邊框時長超過的后果:
到此這篇關(guān)于Python+Selenium實現(xiàn)在Geoserver批量發(fā)布Mongo矢量數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python批量發(fā)布Mongo矢量數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python tkinter GUI繪制,以及點擊更新顯示圖片代碼
這篇文章主要介紹了python tkinter GUI繪制,以及點擊更新顯示圖片代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Pytorch實現(xiàn)圖像識別之數(shù)字識別(附詳細注釋)
這篇文章主要介紹了Pytorch實現(xiàn)圖像識別之數(shù)字識別(附詳細注釋),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05pycharm中使用request和Pytest進行接口測試的方法
這篇文章主要介紹了pycharm中使用request和Pytest進行接口測試的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Python 3.x基礎(chǔ)實戰(zhàn)檢查磁盤可用空間
這篇文章主要為大家介紹了Python 3.x基礎(chǔ)實戰(zhàn)之檢查磁盤可用空間實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05Django中常用的查詢數(shù)據(jù)方法及查詢對象的條件詳解
在web 開發(fā)過程中,Django 與后臺數(shù)據(jù)庫的交互是必不可少的一項,也是實現(xiàn)業(yè)務(wù)邏輯所需數(shù)據(jù)的重要方式,這篇文章主要給大家介紹了關(guān)于Django中常用的查詢數(shù)據(jù)方法及查詢對象條件的相關(guān)資料,需要的朋友可以參考下2021-09-09OpenCV4.1.0+VS2017環(huán)境配置的方法步驟
這篇文章主要介紹了OpenCV4.1.0+VS2017環(huán)境配置的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07