小编写这篇文章的一个主要目的,主要是来给大家做一个解答,解答的内容是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计算边框时长超过的后果:
综上所述,这篇内容就给大家介绍到这里了,希望可以给大家带来帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/128444.html
小编写这篇文章的主要目的,主要是来给大家做个详细的解答,解答的内容主要是Python的相关内容,包括利用Python实现GeoServer矢量文件的批量发布,具体是怎么样进行操作呢?下面就给大家详细解答下。 0.前言 由于矢量图层文件较多,手动发布费时费力,python支持的关于geoserver包(geoserver-restconfig)又由于年久失修,无法在较新的geoserver版...
摘要:自动化这一专栏,将以目的为导向,以简化或自动化完成工作任务为目标,将运用于实践中,解决实际问题,以激发读者对这门脚本语言的学习兴趣。 Python 自动化 这一专栏...
摘要:目标通过模拟浏览器抓取淘宝商品美食信息,并存储到数据库中。流程框架淘宝页面比较复杂,含有各种请求参数和加密参数,如果直接请求或者分析将会非常繁琐。 目标 通过Selenium模拟浏览器抓取淘宝商品美食信息,并存储到MongoDB数据库中。 流程框架 淘宝页面比较复杂,含有各种请求参数和加密参数,如果直接请求或者分析Ajax将会非常繁琐。Selenium是一个自动化测试工具,可以驱动浏览...
小编写这篇文章的主要目的,主要是讲解一些关于python的事情,比如需要对图片进行批量压缩,压缩的方法还是比较的多的,那么,为了提高效率,怎么进行批量压缩呢?下面就给大家详细解答下。 前言 最近在研究怎么对图片资源进行无损压缩,网上也找了一些资料。总而言之,收获不少,所以想对最近的学习做个总结。 无损压缩其实是相对而言的,目的是为了减小图片资源的内存大小但又不影响图片的显示质量。下面我将...
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
阅读 909·2023-01-14 11:38
阅读 876·2023-01-14 11:04
阅读 739·2023-01-14 10:48
阅读 1980·2023-01-14 10:34
阅读 941·2023-01-14 10:24
阅读 818·2023-01-14 10:18
阅读 498·2023-01-14 10:09
阅读 571·2023-01-14 10:02