【问题标题】:phantomjs unable to find element on pagephantomjs无法在页面上找到元素
【发布时间】:2016-08-23 00:29:40
【问题描述】:

最近,我在 RSelenium 下驱动 phantomjs 时遇到了麻烦。似乎浏览器无法使用findElement() 在页面上找到任何内容。如果我传递一些简单的东西:

library("RSelenium")
RSelenium::checkForServer()
RSelenium::startServer()
rd <- remoteDriver(browserName = "phantomjs")
rd$open()
Sys.sleep(5)

rd$navigate("https://www.Facebook.com")
searchBar <- rd$findElement(using = "id", "email")

我收到以下错误:

Error:   Summary: NoSuchElement
Detail: An element could not be located on the page using the given search parameters.
class: org.openqa.selenium.NoSuchElementException

对造成这种情况的原因有什么想法吗?我导航到哪个页面似乎并不重要。每当我尝试在网页上定位元素时,它都会失败。这个问题最近开始出现,当我的 cron 作业开始失败时,我注意到了它。

我正在使用 R 3.3.1 和 phantomjs 2.1.1 在 Ubuntu 14.04 LTS 中工作。我不怀疑存在某种类型的兼容性问题,因为这是最近才起作用的,而且我还没有更新任何东西。

【问题讨论】:

  • Google 是一个简单的工作示例。无论站点如何,它都会引发错误。我可以更新问题以排除 Google,但这似乎无关紧要
  • 抱歉,如果您有这样的印象。我从来没有真正从谷歌上抓取内容,也没有意识到违规行为。已更新问题以排除 Google。

标签: r phantomjs rselenium


【解决方案1】:

您安装的phantomjs 的版本可能受到限制。见here

  • 由于预构建的无源 Selenium blob 已禁用 Ghostdriver。
  • 添加了 README.Debian,解释了与上游“phantomjs”的区别。

如果您最近使用apt-get 安装,那么很可能是这种情况。您可以从 phantomjs website 下载并将 bin 位置放在您的 PATH 中。

或者使用npm为你安装一个版本

npm install phantomjs-prebuilt

这将只是一个指向 node_modules/.bin/phantomjs 中的 bin 的链接。

关于 apt-get 限制背后的原因,您可以阅读包含 here 的 README.Debian 文件。

限制

与静态链接的原始“phantomjs”二进制文件不同 修改QT+WebKit,Debian包是用系统libqt5webkit5构建的。 不幸的是,后者没有 webSecurity 扩展,因此 "--web-security=no" 预计会失败。

https://github.com/ariya/phantomjs/issues/13727#issuecomment-155609276


由于删除了无源预构建 blob,Ghostdriver 已瘫痪:

src/ghostdriver/third_party/webdriver-atoms/*

因此所有 PDF 功能都被破坏了。


PhantomJS 无法在无头模式下运行(如果没有 X 服务器 可用)。

不幸的是,它无法在 Debian 中修复。实现无头 上游与定制的 QT + Webkit 静态链接。我们不想 运送这些项目的分叉。最终说服会很棒 上游使用标准库。同时可以使用“xvfb-run” 来自“xvfb”包:

xvfb-run --server-args="-screen 0 640x480x16" phantomjs

如果您不想为 phantomjs 设置路径,则可以将其添加为额外的:

library(RSelenium)

selServ <- startServer()
pBin <- list(phantomjs.binary.path = "/home/john/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs")
rd <- remoteDriver(browserName = "phantomjs"
                   , extraCapabilities = pBin)
Sys.sleep(5)
rd$open()

rd$navigate("https://www.Facebook.com")
searchBar <- rd$findElement(using = "id", "email")

rd$close()
selServ$stop()

【讨论】:

  • 感谢您的反馈。好像我记得读过这个。令我震惊的是,它过去一直有效,我不记得更新任何内容。尽管如此,这似乎是一个很好的起点,我将在今天晚些时候进行研究并报告。
  • 顶级的东西。添加了当 bin 不在 PATH 中时启动 phantomjs 的一些信息。
  • 嗯,这似乎是phantomjs 版本的问题。就像我说的,我的工作直到最近才失败,所以也许我在某个时候运行了apt-get upgradeapt-get dist-upgrade。我必须更加小心地向前迈进。感谢您的帮助。
  • @ander2ed 很高兴听到。如果您对无头浏览器感兴趣,您可能会发现从 docker 容器运行的 firefox/chrome 很有用。 rpubs.com/johndharrison/RSelenium-Docker 有一个小插曲详细介绍了基础知识
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2021-09-05
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多