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

目录
  • 一、安装 Selenium和ChromeDriver
  • 二、安装Geoserver必要插件
  • 三、关于Selenium中XPath的使用技巧
  • 四、脚本编写

首先,声明一下,这里我完成的脚步属于半自动化的,我戏称它为“有监督的半自动化”脚本。具体原因后面会详细说明。

一、安装 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矢量数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python操作Mongodb数据库的方法小结

    本文实例讲述了Python操作Mongodb数据库的方法.分享给大家供大家参考,具体如下: 一 导入 pymongo from pymongo import MongoClient 二 连接服务器 端口号 27017 连接MongoDB 连接MongoDB我们需要使用PyMongo库里面的MongoClient,一般来说传入MongoDB的IP及端口即可,第一个参数为地址host,第二个参数为端口port,端口如果不传默认是27017. conn = MongoClient("localhost

  • Python简单连接MongoDB数据库的方法

    本文实例讲述了Python连接MongoDB数据库的方法.分享给大家供大家参考,具体如下: Python使用pymongo操作MongoDB数据库,首先需要安装pymongo模块,如下示例是通过pymongo连接MongoDB数据库,带用户名和密码: from pymongo import MongoClient import datetime client = MongoClient('mongodb://tanteng:123456@localhost:27017/') db = clien

  • python mongo 向数据中的数组类型新增数据操作

    我就废话不多说了,大家还是直接看图吧~ 补充知识:pymongo插入数据时更新和不更新的使用 (1)update的setOnInsert 当该key不存在的时候执行插入操作,当存在的时候则不管,可以使用setOnInsert db.test.update({'_id': 'id'}, {'$setOnInsert': {'a': 'a'}, true) 当id存在的时候,忽略setOnInsert. (2)update的set 当key不存在的时候执行插入操作,当存在的时候更新除key以外的se

  • 如何用python 操作MongoDB数据库

    目录 一.前言 二.操作 MongoDB 1.安装 pymongo 2.连接 MongoDB 3.选择数据库 4.选择集合 5.插入数据 6.查询 7.更新数据 8.删除 一.前言 MongoDB属于 NoSQL(非关系型数据库),是一个基于分布式文件存储的开源数据库系统. 二.操作 MongoDB 1.安装 pymongo python 使用第三方库来连接操作 MongoDB,所以我们首先安装此库. pip3 install pymongodb 2.连接 MongoDB 使用 MongoCli

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

    目录 一.安装 Selenium和ChromeDriver 二.安装Geoserver必要插件 三.关于Selenium中XPath的使用技巧 四.脚本编写 首先,声明一下,这里我完成的脚步属于半自动化的,我戏称它为“有监督的半自动化”脚本.具体原因后面会详细说明. 一.安装 Selenium和ChromeDriver 安装Selenium: pip install selenium 安装ChromeDriver ChromeDriver下载地址:chromedirver. 注意:下载的版本号要

  • Python+selenium 自动化快手短视频发布的实现过程

    第一章:效果展示 ① 效果展示 ② 素材展示 一个为视频,另一个为像素大小不小于视频的封面. 第二章:实现过程 ① 调用已启用的浏览器 通过调用已启用的浏览器,可以实现直接跳过每次的登录过程. from selenium import webdriver options = webdriver.ChromeOptions() options.add_experimental_option("debuggerAddress", "127.0.0.1:5003") dr

  • python Selenium实现付费音乐批量下载的实现方法

    必备环境 废话 每年回家都要帮我爸下些音乐,这对我来说都是轻车熟路!可当我打开网易云点击下载按钮的时候,可惜已物是人非啦! 开个 VIP 其实也不贵,临时用用也就¥15!但 IT 男的尊严必须要有,于是开始徜徉于搜索引擎中 最后在知乎中,搜索到一个网址VIP付费音乐解析 P.S.再次感谢提供该服务的作者!如果你下载的音乐数量不多,直接这里搜索下载,下载后修改文件名即可!并且在这个网址中点击播放列表-点击同步,可以同步网易云的歌单!之后批量下载即是下载这些网易云的歌单!但是下载某个歌单中的几百首歌

  • python UDF 实现对csv批量md5加密操作

    工作上遇到需求,一批手机号要md5加密导出.为了保证数据安全,所以没有采用网上工具来加密. md5的加密算法是开源的且成熟的,很多语言都有对应包可以直接用,我写了一个简单的python来实现,另一位同事做了一个hiveUDF来实现,这里都给大家分享一下. 目标: 读取csv文件,并且对其中的内容进行md5加密,32位加密,将加密后的密文存入另一个csv文件. python实现: (1)准备好要读取的csv文件.单列,一行存一个手机号码. (2)python代码: #encoding=utf8 i

  • 基于Python实现GeoServer矢量文件批量发布

    目录 0. 前言 1. 环境 1.1 基础环境 1.2 谷歌浏览器驱动 2. 基本流程 2.1 初始化 2.2 登录 2.3 新建数据源 2.4 保存数据存储 2.5 发布图层 3. 完整代码 0. 前言 由于矢量图层文件较多,手动发布费时费力,python支持的关于geoserver包(geoserver-restconfig)又由于年久失修,无法在较新的geoserver版本中正常使用. 查阅了很多资料,参考了下面这篇博客,我简单写了一个自动化发布矢量文件的代码. 基本流程:获取指定文件夹下

  • python+selenium+chrome批量文件下载并自动创建文件夹实例

    实现效果:通过url所绑定的关键名创建目录名,每次访问一个网页url后把文件下载下来 代码: 其中 data[i][0].data[i][1] 是代表 关键词(文件保存目录).网站链接(要下载文件的网站) def getDriverHttp(): for i in range(reCount): # 创建Chrome浏览器配置对象实例 chromeOptions = webdriver.ChromeOptions() # 设定下载文件的保存目录为d盘的tudi目录, # 如果该目录不存在,将会自

  • selenium+python自动化78-autoit参数化与批量上传功能的实现

    前言 前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片. 这样每次调用的时候,在命令行里面加一个文件路径的参数就行. 一.命令行参数 1.参数化传入的参数,可以通过autoit的命令行参数: myProg.exe param1 "This is a string parameter" 99 在脚本中,可用以下变量获取命令行参数: $CmdLine[0] ; = 3 $CmdLine[1] ; = param1 $Cmd

  • Python+selenium实现趣头条的视频自动上传与发布

    目录 效果展示 效果展示 素材展示 实现过程 调用已启用的浏览器 上传视频和封面 完整源码展示  补充 Python+selenium操作已启用的chrome浏览器 Python+selenium实现自动导入.上传外部文件 效果展示 效果展示 素材展示 一个为视频,另一个为像素大小不小于视频的封面. 实现过程 调用已启用的浏览器 通过调用已启用的浏览器,可以实现直接跳过每次的登录过程. 使用方法可以参考补充内容 from selenium import webdriver options = w

  • Python+Selenium实现短视频自动上传与发布的实践

    目录 前言 第一章:效果展示 第二章:实现过程 前言 最近有人对自动上传与发布很感兴趣,都私下找我说了好几次了.今天,必须把他安排,必须实力宠粉. “本篇依次介绍目前主流的短视频平台(抖音.快手.B站.小红书.微视.百度好看视频.西瓜视频.微信视频号.搜狐视频.一点号.大风号.趣头条等)的短视频自动发布,希望帮助大家更方便.高效的来进行自媒体的创作与管理. 第一章:效果展示 ① 效果展示 ② 素材展示 一个为视频,另一个为像素大小不小于视频的封面. 第二章:实现过程 ① 调用已启用的浏览器 通过

  • Python实现在PyPI上发布自定义软件包的方法详解

    目录 1. 引言 2. 创建PyPI账号 3. 创建包名 4. 按照如下格式组织包 5. 安装 Build & Twine 6. 构建测试包 7. 上传测试包 8. 总结 1. 引言 在Python中我们经常使用pip来安装第三方Python软件包,其实我们每个人都可以免费地将自己写的Python包发布到PyPI上,供他人来通过pip进行安装. 在本文中,我们将从一步一步地详细介绍如何发布测试包. 2. 创建PyPI账号 网址: https://pypi.org/ 我们可以通过上面的链接在PyP

随机推荐