在 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$)
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 的专家,无法判断是否可能存在一些延迟加载(?)或其他我不知道的事情。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)