r - 在 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 的专家,也无法判断是否存在一些延迟加载(?)或其他我不知道的情况。
解决方案
推荐阅读
- tableau-api - 从 tableau 中的表创建线图
- scala - 无法读取 Parquet 支持的区分大小写的 Glue 表
- excel - StopTimer() 不工作。需要一种在 excel 中重新启动计时器的方法
- angular - 如何在 Angular 2+ 中将 Reactive Form 值与带下划线的模型同步
- c# - 为什么 Queryable.OrderBy 方法允许动态第二个参数?
- c - 使用 SLLI 访问循环中的数组元素
- python - 如何拆分'; ' 在 pandas 中使用 read_csv() 后在 pandas 中分离 CSV 文件?
- c# - 如何使用触发器更改按钮内容的属性
- java - 多个 setvalue 的完成侦听器
- azure-api-management - API 管理 使用 DevOPS 定制新的开发者门户