问题描述
考虑以下伪代码:
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 (将#修改为@)