Python+Selenium实现在Geoserver批量发布Mongo矢量数据

 更新时间:2022年07月01日 10:53:46   作者:Leo_Franklin  
这篇文章主要为大家详细介绍了如何利用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计算边框时长超过的后果:

到此这篇关于Python+Selenium实现在Geoserver批量发布Mongo矢量数据的文章就介绍到这了,更多相关Python批量发布Mongo矢量数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python tkinter GUI绘制,以及点击更新显示图片代码

    python tkinter GUI绘制,以及点击更新显示图片代码

    这篇文章主要介绍了python tkinter GUI绘制,以及点击更新显示图片代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Pytorch实现图像识别之数字识别(附详细注释)

    Pytorch实现图像识别之数字识别(附详细注释)

    这篇文章主要介绍了Pytorch实现图像识别之数字识别(附详细注释),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • python文件处理--文件读写详解

    python文件处理--文件读写详解

    这篇文章主要介绍了Python 处理文件的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • Python实现一元一次与一元二次方程求解

    Python实现一元一次与一元二次方程求解

    这篇文章主要为大家详细介绍了如何利用Python实现一元一次与一元二次方程的求解,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • pycharm中使用request和Pytest进行接口测试的方法

    pycharm中使用request和Pytest进行接口测试的方法

    这篇文章主要介绍了pycharm中使用request和Pytest进行接口测试的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python 3.x基础实战检查磁盘可用空间

    Python 3.x基础实战检查磁盘可用空间

    这篇文章主要为大家介绍了Python 3.x基础实战之检查磁盘可用空间实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Python操作MySQL数据库的方法

    Python操作MySQL数据库的方法

    pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。接下来通过本文给大家介绍Python操作MySQL数据库的方法,感兴趣的朋友一起看看吧
    2018-06-06
  • Django中常用的查询数据方法及查询对象的条件详解

    Django中常用的查询数据方法及查询对象的条件详解

    在web 开发过程中,Django 与后台数据库的交互是必不可少的一项,也是实现业务逻辑所需数据的重要方式,这篇文章主要给大家介绍了关于Django中常用的查询数据方法及查询对象条件的相关资料,需要的朋友可以参考下
    2021-09-09
  • Web自动化之Selenium常用操作方法大全

    Web自动化之Selenium常用操作方法大全

    Selenium是一种自动化测试工具,可以用于测试Web应用程序,它提供了一组用于自动化Web浏览器进行测试的API,下面这篇文章主要给大家介绍了关于Web自动化之Selenium常用操作方法的相关资料,需要的朋友可以参考下
    2023-06-06
  • OpenCV4.1.0+VS2017环境配置的方法步骤

    OpenCV4.1.0+VS2017环境配置的方法步骤

    这篇文章主要介绍了OpenCV4.1.0+VS2017环境配置的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论