首页 > 解决方案 > 在 phantomjs 会话中搜索元素或先提取源代码的区别?

问题描述

考虑以下伪代码:

pjs <- webdriver::run_phantomjs()
ses <- webdriver::Session$new(port = pjs$port)
ses$go("$randomurl$")

问题:在任意给定的情况下,方法 1) 和 2) 会产生相同数量的元素/节点$ANY_XPATH$吗?

方法#1:

ses$findElements(xpath = $ANY_XPATH$)

方法#2:

elem <- ses$findElement(xpath = "/*")
doc <- elem$getAttribute(name = "innerHTML") %>% xml2::read_html()
doc %>% rvest::html_nodes(xpath = $ANY_XPATH$)

我为什么要问?我意识到像下面这样的某些页面没有完全呈现:

url <- "https://www.bs-krohn.de/#bewerber"
ses$go(url)
ses$takeScreenshot()
browseURL(url)

显然,这更像是一个额外的挑战,但这让我想知道我是否可以安全地使用方法 2。我更喜欢方法 2,因为它比方法 1 快。

我最好的猜测......应该是 1) 和 2) 应该相等,到目前为止我还不能凭经验证伪这个假设。

我目前的理解是 phantomjs 作为一个无头浏览器,呈现的页面包括所有要触发的 javascript 片段。所以

elem <- ses$findElement(xpath = "/*")
doc <- elem$getAttribute(name = "innerHTML") %>% xml2::read_html()

可能相当于在非无头浏览器中执行“右键单击 -> 显示源代码”。但我当然不是 phantomjs 的专家,也无法判断是否存在一些延迟加载(?)或其他我不知道的情况。

标签: rxpathphantomjsrvestxml2

解决方案


推荐阅读