python自动化之基于Arcgis10.2.2中Arcpy编译环境下实现arcgis应用内要素与Web网页联动功能探索--Arcgis高级超链接功能(脚本超链接的使用)
1.项目背景阐述
为强化自然资源统一调查监测,准确掌握全省国土利用变化情况,满足各项自然资源管理工作需要,2022年度全省国土变更调查工作开始了。
近期国家下发遥感监测图斑、地理国情监测变化图斑及自主提取变化图斑,要求按照规定时间点上报核查初报数据。同时,城乡建设用地增减挂钩、土地综合整治、高标准农田建设等项目涉及地类变化的,要及时纳入当年国土变更调查。国家下发图斑、地方自主提取图斑需要逐一现场查看核实,分析变化原因,对变化后的土地利用现状地类开展认定。我们单位负责外业调查的技术人员坚持走到、看到、问到“三到”原则,顶风冒雨实地拍照举证,并充分利用“互联网+”的信息化手段并将拍摄照片上传到省级国土变更调查在线举证与核查云平台(后面简称为“外业核查云平台”)。面对这一紧迫艰巨的任务,既要保证质量,还得准时上报调查成果。因此亟需优化工作步骤,提升效率。
就现阶段的工作流程来讲,我发现在做内业的过程中,存在提升效率的地方。在查看外业平台同时再进行内业修改的过程中可以进一步优化工作步骤,做一些效率上的提升。
2.常规操作
具体工作内容描述
我在工作过程中,首先需要在arcgis软件内找到当前范围内监测图斑的编号,然后把图斑的编号复制到“外业核查云平台”上,找到外业举证的详情,再决定是否要进行内业修改。工作倒不是很难,就是来回的切换窗口操作很不方便(多屏显示的除外)。就意味着在外业后举证平台与arcgis应用之间来回切换,操作很是不方便,为提高工作效率,现做arcgis内图层要素与网页搜索的联动研究。
效果演示
3.新的玩法
效果演示
4.启发与思路
4.1.简述
- 已知条件1 Arcgis可以使用超链接。超链接[^1]可用于访问与要素关联的文档或网页。使用工具条上的超链接工具(如下图红框内所示) :
使用超链接工具之前,您需要先进行定义,超链接可定义为以下三种类型中的任一种:
Hyperlink类型 | 说明 |
---|---|
文档 | 使用超链接工具单击要素时,将在相应的应用程序(例如 Microsoft Excel)中打开关联的文档或文件。 |
URL | 使用超链接工具单击要素时,将在 web 浏览器中启动一个 web 页面。 |
脚本 | 使用超链接工具单击要素时,要素值将发送到脚本。此选项可启用对自定义行为的使用。 |
可访问各要素的超链接。本文将主要介绍如何使用脚本
实现Arcgis应用与网页间的联动跳转。
- 已知条件2 Arcgis可以使用Python编写的脚本程序。
- 已知条件3 python可以使用Selenium实现网页操作的自动化。
4.2.启发
- 能否利用python将selenium的自动化功能应用到arcgis中,实现半自动化的操作?为了解决这个问题,由此我才写出这篇文章。
5.环境搭建
- ArcGIS10.2.2
- Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
(ArcGIS10.2.2自带的python版本)
- IDLE:用于测试编译的环境
(ArcGIS10.2.2自带的python版本)
- PyScripter3.6.1(32bit) :IDLE和PyScripter
二选一就行
- Chrome 版本 109.0.5414.120(正式版本) (64 位)
- chromedriver(
与Chrome浏览器的版本号保持一致
)
6.实现步骤
在进行编码测试的过程中有出现了两种思路:
说明 | 优点 | 缺点 | |
---|---|---|---|
思路1 | 点击要素后,打开浏览器,需要先登录账户,然后再进行后续联动的操作 | 一步到位 | 耗时,每次都重新登录 |
思路2 | 提前打开浏览器登录账户,然后获取已登录的窗口,进行后续操作。 | 省时,效率明显提升 | 提前做好准备(这不算缺点) |
经过分析后,直接选择思路2,后续实现的代码也是依据思路2编写。
7.代码
代码为测试代码,非脚本代码,脚本代码个人资源中。
# encoding=utf8
import sys
#import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
reload(sys)
sys.setdefaultencoding('utf8')
def locatejcbh(field):
#点击“工作流程”
gzlc=driver.find_element(By.XPATH, u"//span[text()='工作流程']")
gzlc.click()
#点击“图斑清单”
tbqd=driver.find_element(By.XPATH, u"//span[text()='图斑清单']")
tbqd.click()
#如果搜索编号框内有文本先清除,然后传入要素的监测编号
search_box=driver.find_element(By.XPATH, u"//input[@placeholder='输入图斑编号关键字搜索']")
search_box.clear()
search_box.send_keys(field)
#点击搜索按钮
search_button=driver.find_element(By.XPATH,"//section/div[1]/div[1]/div[3]/div/div/div/button")
search_button.click()
driver.implicitly_wait(1)
#time.sleep(1)
#点击“详情”按钮
details=driver.find_element(By.XPATH, "//*[@id='ListMain-list']/div/div[1]/div/div/div[4]/div[2]/table/tbody/tr[1]/td[16]/div/button")
details.click()
if __name__ == '__main__':
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
chrome_driver = r"C:\Python27\ArcGIS10.2\chromedriver.exe"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
print(driver.title)
locatejcbh("370683DF55808")
【说明】
- 打开能够使用脚本操作的网页,需要设置浏览器的本地端口,要保证脚本调用端口与设置的端口一致。
- 如果提前打开的Chrome浏览器内包含多余的窗口请关闭,只保留需要操作的窗口。
- 在使用Selenium模拟自动化操作的过程中,要素的定位则显得尤为重要,选择合适的方法。
- 由于网页内的元素加载需要时间,因此需要在进行元素定位之前定位,需要等待(隐式等待、显示等待、固定时长等待),选择合适的等待方式。
- 在进行软件与网页联动的过程中,总是会出现chromedriver窗口,影响操作,需要做好配置。
8.小结
本次操作是将Arcgis脚本超链接与python的Selenium爬虫工具相结合,实现自动化处理。
问题重点在于如何配置Arcpy的扩展库,并调用配置好的文件(后续整理好后,会上传资源:超链接配置说明.docx、快速配置环境
)后续会在此附上链接供免费下载测试,欢迎各位小伙伴进行测试,互相交流,共同进步!