资讯专栏INFORMATION COLUMN

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

89542767 / 519人阅读

  小编写这篇文章的一个主要目的,主要是来给大家做一个解答,解答的内容是Python+Selenium,具体的一个内容解释是什么呢?比如,我们可以实现Geoserver批量发布Mongo矢量数据,具体的一个内容,下面就给大家详细解答下。


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


  一、安装Selenium和ChromeDriver


  安装Selenium:


  pip install selenium

  安装ChromeDriver


  ChromeDriver下载地址:chromedirver.


  注意:下载的版本号要和自己Chrome版本号一样二、安装Geoserver必要插件


  注意:安装的geoserver插件版本要和安装的geoserver版本号完全一致,否则会报错


  1.安装Mongodb插件:


  以我的本地geoserver版本为例:

01.png

  解压后得到的jar文件


  将得到的jar文件粘贴到这里,重启tomcat服务器即可安装

02.png

  2.安装矢量插件


  这是从官网插件下载后的并且解压后的样子,安装方式同Mongo插件一样

03.png

  三、关于Selenium中XPath的使用技巧


  1.在要操作的网站按F12打开Chrome的调试工具,选择元素选择工具,如下图所示:

04.png

  2.选择你要操作的元素,如下所示:在这里插入图片描述

05.png

  3.右键Copy,选择复制完整的XPath路径,这样就可以精准的引用到代码中了。

06.png

  四、脚本编写


  完整代码如下:


  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://www.ucloud.cn/yun/128444.html

相关文章

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

      小编写这篇文章的主要目的,主要是来给大家做个详细的解答,解答的内容主要是Python的相关内容,包括利用Python实现GeoServer矢量文件的批量发布,具体是怎么样进行操作呢?下面就给大家详细解答下。  0.前言  由于矢量图层文件较多,手动发布费时费力,python支持的关于geoserver包(geoserver-restconfig)又由于年久失修,无法在较新的geoserver版...

    89542767 评论0 收藏0
  • [Python自动化]selenium之文件批量下载

    摘要:自动化这一专栏,将以目的为导向,以简化或自动化完成工作任务为目标,将运用于实践中,解决实际问题,以激发读者对这门脚本语言的学习兴趣。 Python 自动化 这一专栏...

    wzyplus 评论0 收藏0
  • 使用selenium模拟浏览器抓取淘宝商品美食信息

    摘要:目标通过模拟浏览器抓取淘宝商品美食信息,并存储到数据库中。流程框架淘宝页面比较复杂,含有各种请求参数和加密参数,如果直接请求或者分析将会非常繁琐。 目标 通过Selenium模拟浏览器抓取淘宝商品美食信息,并存储到MongoDB数据库中。 流程框架 淘宝页面比较复杂,含有各种请求参数和加密参数,如果直接请求或者分析Ajax将会非常繁琐。Selenium是一个自动化测试工具,可以驱动浏览...

    djfml 评论0 收藏0
  • 怎么使用python对图片进行批量压缩

      小编写这篇文章的主要目的,主要是讲解一些关于python的事情,比如需要对图片进行批量压缩,压缩的方法还是比较的多的,那么,为了提高效率,怎么进行批量压缩呢?下面就给大家详细解答下。  前言  最近在研究怎么对图片资源进行无损压缩,网上也找了一些资料。总而言之,收获不少,所以想对最近的学习做个总结。  无损压缩其实是相对而言的,目的是为了减小图片资源的内存大小但又不影响图片的显示质量。下面我将...

    89542767 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<