Python + Selenium 实现 Geoserver 批量发布 Mongo 矢量数据
本篇文章旨在以半自动化的方式给大家介绍 Python + Selenium 如何实现 Geoserver 批量发布 Mongo 矢量数据,同时也为大家解答一些相关问题。

安装 Selenium 和 ChromeDriver
安装 Selenium 非常简单,只需要使用以下命令:
pip install selenium
安装 ChromeDriver,您可以前往 http://chromedirver 下载对应版本的 ChromeDriver,注意需要与本地 Chrome 版本一致。
安装 Geoserver 必要插件
安装 Geoserver 必要插件非常简单,只需要按照版本需求下载对应插件并解压即可。注意版本号需要与 Geoserver 版本一致,否则可能会出现报错。
Selenium 中 XPath 的使用技巧
使用 Selenium 中的 XPath 可以实现非常精准的操作,具体使用方法如下:
- 打开 Chrome 调试工具,选择元素选择工具;
- 选择要操作的元素,右键选择“复制完整的 XPath 路径”;
- 粘贴 XPath 路径到代码中进行操作。
如果您对 XPath 不熟悉,可以查看相关教程来学习。
脚本编写
下面是完整的 Python 脚本,注释已经详细说明了每一步操作的含义。根据需求可自行修改实现批量发布。
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 caching
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() # 点击需要添加的矢量切片
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() # 点击需要添加的矢量切片
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() # 点击需要添加的矢量切片
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() # 点击需要添加的矢量切片
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) # 添加时长
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) # 添加时长
wd.find_element_by_css_selector("#page div.button-group.selfclear>a:nth-child(1)").click()
time.sleep(1)
需要注意的是,在该脚本中,计算过程中可能会出现时间过长的问题,导致
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7123.html
