微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 R 从动态网站中的交互式嵌入式弹出窗口中抓取信息

如何解决使用 R 从动态网站中的交互式嵌入式弹出窗口中抓取信息

我正在尝试从一个动态网站抓取那些黄色小车的信息:Trunk road gritter tracker

这是一个包含许多黄色汽车的动态网站,每辆车都有自己的信息,如“车辆”、“年龄(范围)”、“来源日期”等。当你点击汽车时,信息会弹出。

但是,我一次只能点击打开一辆车的信息栏,这意味着我一次只能得到一个特定的弹出数据,相应地,抓取结果也只针对该特定汽车。如何抓取所有汽车的信息栏?

在网页初始状态下,还没有点击汽车,所以我的想法是使用remdr$findelement()函数来导航汽车,然后使用 clickElement() 来模拟点击。点击后会弹出一个窗口,然后使用html_Nodes()html_text()函数抓取信息。抓取后,模拟点击弹出的关闭按钮。至此,一辆车的抓取完成,再重复这个过程,实现对所有汽车信息的抓取。

enter image description here

我使用了 Rselenium 和 rvest,这是我的代码

remDr = remoteDriver(remoteServerAddr="localhost",port=4444L,browserName="chrome")
    remDr$open(silent = T)
    url = "https://www.arcgis.com/apps/webappviewer/index.html?id=2de764a9303848ffb9a4cac0bd0b1aab"
    remDr$navigate(url)
    
    image_button = remDr$findElement('xpath',value = "//*[@id='TSWT_VehiclesAndTrail_2020_1393_layer']/*[name()='image']")
    image_button$clickElement()
    
    webpage <- read_html(remDr$getPageSource()[[1]])
    data <- webpage %>% html_nodes(".attrValue") %>% html_text()
    data

但是,有一些问题。当许多汽车在同一页面时,我不知道如何使用 findElement() 导航到汽车。汽车图像的结构如下所示。尽管每个图像都有自己特定的 xPath,但它位于嵌套的 strcutre 中,我无法通过直接搜索该图像 xpath 来成功找到元素。根据这两个答案:Finding SVG Elements using RSelenium and XPath trigger all pop-ups,我使用 remDr$findElement('xpath',value = "//*[@id='TSWT_VehiclesAndTrail_2020_1393_layer']/*[name()='image']") 但这仅在我放大页面以便屏幕上只有一辆车时才有效,我可以获得信息成功,当超过一辆车出现在屏幕上时,将不会返回任何信息。我试过 remDr$findElement()[[1]] 但还是不行。

<svg>
    <g id=xxx>
        <image></image>
        <image></image>
        <image></image>
            .
            .
            .
    </g>
</svg>

如何一次从不同的弹出窗口中获取所有不同的信息?我的想法可行吗,或者还有其他更简单的方法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。