image - 从地图设计网站获取几何信息和名称
问题描述
有一个地图设计网站,该网站的信息被“web.archive.org”作为快照。不过,我需要的几乎所有信息都可以在此快照中读取。该网站是“ https://web.archive.org/web/20130601211515/http://rasatlar.dsi.gov.tr/ ”。
当鼠标碰到本身有几何位置的点图时,在右下角可以看到带有代码的标题和其他信息,在右边可以看到它的X和Y位置(纬度、经度)信息底角。我需要收集本网站保留的这些 X、Y 位置和标题、代码信息。
下面的脚本尝试在框中打印文本,但我也有这个错误。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome(executable_path=r'D:\chromedriver.exe')
driver.implicitly_wait(30)
base_url = "https://www.katalon.com/"
verificationErrors = []
accept_next_alert = True
driver.get("https://web.archive.org/web/20130601211515/http://rasatlar.dsi.gov.tr/")
a= driver.find_element_by_id("OpenLayers_Geometry_Point_6795")
hover = ActionChains(driver).move_to_element(a)
#driver.find_element_by_id("draggable").click()
b= driver.find_element_by_xpath((By.XPATH,"//*[@id='draggable']/p[1]")).text
print (b)
错误:
WebDriverException: invalid argument: 'value' must be a string
解决方案
编辑(对于更新的问题):
您的 xpath(如下)不工作:
all_points = WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.XPATH,"//div[contains(@id,'OpenLayers_Geometry_Point_')]/img")))
正确的 xpath 是:
//div[contains(@id,'OpenLayers_Layer_Vector_RootContainer')]//*[contains(@id,'OpenLayers_Geometry_Point_')]
看起来您有兴趣从下图中显示的框中获取信息:
问题是,一旦您将鼠标移开,信息就会消失。但是,您可以使用 CDT 中提供的“中断”功能使其保持不变。
我在下图(右侧)中发布了 HTML 结构,您可以参考它来获取正确的 xpath:
Xpath 获取标题元素(即 E17A008/TARSUS IRMAĞI ):
//*[@id="draggable"]/h1
Xpath 获得第二个元素,即 MUHAT KÖPRÜSÜ
//*[@id="draggable"]/p[1]
同样,您应该能够获得其他元素的相关 xpath。
如何使用中断:
右键单击右框(不要担心,即使它是空框)。
单击 On Inspect -> 右键单击开发工具中显示的元素,即
<div id="draggable" class="ui-widget-content ui-draggable"></div>
- 点击Break On -> 子树修改
现在,如果您尝试选择另一个地址,则无论何时对该元素进行任何修改,都会中断。
推荐阅读
- google-apps-script - 应用程序脚本,获取文件夹中的文件
- vue.js - 用于 vue js 的 material-components-web
- c# - Unity 自定义编辑器错误“类型不是受支持的 int 值”
- node.js - 如何将间隔更新系统添加到我的机器人状态?
- sass - SASS 如何知道未定义的变量?
- java - java中checkmarx扫描中的日志伪造
- python - Pandas Groupby 均值和多列中的第一个
- html - 如何将函数从父级传递给深层嵌套的子级并将@input值用于Angular 8中传递的函数?
- unix - 在 xv6 中制作树函数
- hadoop - Cloudera Manager 有什么替代方案吗?(CDH)