網站首頁 編程語言 正文
首先,聲明一下,這里我完成的腳步屬于半自動化的,我戲稱它為“有監督的半自動化”腳本。具體原因后面會詳細說明。
一、安裝 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計算邊框時長超過的后果:
原文鏈接:https://blog.csdn.net/Leo_Franklin/article/details/106191753
相關推薦
- 2023-07-26 webpack優化代碼運行之Code split
- 2022-04-09 給原生html中添加水印遮罩層
- 2022-12-12 C語言scanf語句吃掉回車或者空格問題及解決_C 語言
- 2023-04-08 python如何實現數組反轉_python
- 2022-09-10 Python學習筆記嵌套循環詳解_python
- 2022-12-10 C語言實現十六進制與二進制的相互轉換_C 語言
- 2022-12-01 可定制React自動完成搜索組件Turnstone實現示例_React
- 2023-12-26 Caused by: org.apache.ibatis.binding.BindingExcept
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支