小編寫這篇文章的一個主要目的,主要是來給大家做一個解答,解答的內容是Python+Selenium,具體的一個內容解釋是什么呢?比如,我們可以實現Geoserver批量發布Mongo矢量數據,具體的一個內容,下面就給大家詳細解答下。
首先,聲明一下,這里我完成的腳步屬于半自動化的,我戲稱它為“有監督的半自動化”腳本。具體原因后面會詳細說明。
一、安裝Selenium和ChromeDriver
安裝Selenium:
pip install selenium
安裝ChromeDriver
ChromeDriver下載地址:chromedirver.
注意:下載的版本號要和自己Chrome版本號一樣二、安裝Geoserver必要插件
注意:安裝的geoserver插件版本要和安裝的geoserver版本號完全一致,否則會報錯
1.安裝Mongodb插件:
以我的本地geoserver版本為例:
解壓后得到的jar文件
將得到的jar文件粘貼到這里,重啟tomcat服務器即可安裝
2.安裝矢量插件
這是從官網插件下載后的并且解壓后的樣子,安裝方式同Mongo插件一樣
三、關于Selenium中XPath的使用技巧
1.在要操作的網站按F12打開Chrome的調試工具,選擇元素選擇工具,如下圖所示:
2.選擇你要操作的元素,如下所示:在這里插入圖片描述
3.右鍵Copy,選擇復制完整的XPath路徑,這樣就可以精準的引用到代碼中了。
四、腳本編寫
完整代碼如下:
from selenium import webdriver from selenium.webdriver.support.ui import Select import time count=0#用于統計帶發布圖層個數 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"))#選擇工作區 time.sleep(1) select.select_by_index(4)#這里數字根據需求自行調整 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') #統計MongoDB中待發布的圖層個數 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"))#選擇工作區 time.sleep(1) select.select_by_index(14)#這里數字根據需求自行調整 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()#點擊進入發布配置 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)
解釋一下:代碼中出現了time.sleep(6),6秒,大家可能會覺得等待的時間有些長,但是這是博主在實踐中覺得可行的時間。因為有的地方數據量太大,geoserver計算邊框時會耗時較長,導致崩潰,如果大家的數據量較小,則可以把,這里的時間調小,或者沒有。
這里Mongon的鏈接之類的工作都是在,之前手動操作的,沒有做自動化,畢竟也沒有多少,這就是半自動化,而監督是腳本執行過程中如果還是避免不了,計算時間過長,則相應圖層手動發布,之后的調整代碼for循環的range后再次執行即可。
再給大家曬一下geoserver計算邊框時長超過的后果:
綜上所述,這篇內容就給大家介紹到這里了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128444.html
小編寫這篇文章的主要目的,主要是來給大家做個詳細的解答,解答的內容主要是Python的相關內容,包括利用Python實現GeoServer矢量文件的批量發布,具體是怎么樣進行操作呢?下面就給大家詳細解答下。 0.前言 由于矢量圖層文件較多,手動發布費時費力,python支持的關于geoserver包(geoserver-restconfig)又由于年久失修,無法在較新的geoserver版...
摘要:自動化這一專欄,將以目的為導向,以簡化或自動化完成工作任務為目標,將運用于實踐中,解決實際問題,以激發讀者對這門腳本語言的學習興趣。 Python 自動化 這一專欄...
摘要:目標通過模擬瀏覽器抓取淘寶商品美食信息,并存儲到數據庫中。流程框架淘寶頁面比較復雜,含有各種請求參數和加密參數,如果直接請求或者分析將會非常繁瑣。 目標 通過Selenium模擬瀏覽器抓取淘寶商品美食信息,并存儲到MongoDB數據庫中。 流程框架 淘寶頁面比較復雜,含有各種請求參數和加密參數,如果直接請求或者分析Ajax將會非常繁瑣。Selenium是一個自動化測試工具,可以驅動瀏覽...
小編寫這篇文章的主要目的,主要是講解一些關于python的事情,比如需要對圖片進行批量壓縮,壓縮的方法還是比較的多的,那么,為了提高效率,怎么進行批量壓縮呢?下面就給大家詳細解答下。 前言 最近在研究怎么對圖片資源進行無損壓縮,網上也找了一些資料。總而言之,收獲不少,所以想對最近的學習做個總結。 無損壓縮其實是相對而言的,目的是為了減小圖片資源的內存大小但又不影響圖片的顯示質量。下面我將...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1983·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02