Python批量发布Mongo矢量数据
Leo_Franklin 人气:0首先,声明一下,这里我完成的脚步属于半自动化的,我戏称它为“有监督的半自动化”脚本。具体原因后面会详细说明。
一、安装 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计算边框时长超过的后果:
加载全部内容