【问题标题】:Lynx with javascript猞猁与 javascript
【发布时间】:2012-03-10 08:15:55
【问题描述】:

所以我用 PHP 编写了一个脚本,需要 javascript 来运行它。我很难找到有关如何使用一些 linux 工具同时使用 php 运行 javascript 以使其自动运行的解决方案(因为在我的浏览器中运行它不是一个选择,我需要它是一个 crontab )。使用“php”命令也不是一个选择,因为它不运行 javascript。所以我找到了一个解决方案,就是 lynx。

所以这是我的问题:出于某种原因,javascript 在我的浏览器中运行得很好,但在 lynx 中却没有。使用 lynx 只需加载页面,无需任何 javascript 参与。有没有办法在 lynx 中调试 javascript,就像 google chrome 一样,您可以从控制台查看正在发生的事情,这样我就可以找出导致脚本无法在 lynx 中运行的原因?

编辑:

显然lynx 不支持javascript。在那种情况下,我的问题是,什么是?我需要像浏览器一样运行此脚本,但要从 linux 命令提示符中运行。如果在这种情况下操作系统很重要,我正在运行最新的 Ubuntu。

【问题讨论】:

  • 您最好在虚拟帧缓冲区 (Xvfb) 中使用浏览器自动化解决方案,例如 Selenium 或我自己的库 dryscrape
  • 您到底想完成什么?其中一种情况并非如此:1) 最好从 Linux cron 作业运行,2) 最好通过网页中加载的 JavaScript 运行
  • @sh-beta,我正在尝试登录一个在 javascript 中使用密码加密的网站,以便在密码发送到服务器之前对其进行加密。由于我不想将他们必须的整个库重写为 php,所以我直接使用他们的 javascript 函数,加密密码,然后使用 POST 将其发送到服务器。
  • @user1215232 调整了我的答案以反映这一点
  • (针对入站 Google 用户)如今,使用 Node.js 应该没问题。将共享逻辑放在不同的层中,并创建一个 Node.js 应用程序来使用它。浏览器应用程序也将使用该逻辑。然后,您可以使用 crontab 轻松自动化您的 Node.js 应用程序。

标签: linux browser-automation lynx


【解决方案1】:

Lynx 不支持 Javascript。

更新 1

根据您对您正在尝试做的事情的总结(登录到需要 JavaScript 进行密码加密的网站),我强烈建议您使用 Selenium 或其他浏览器自动化包。即使您在没有这样的层的情况下使密码提交正常工作,如果您使用像 Lynx 这样的极简浏览器,该网站也可能会出现其他问题。

【讨论】:

  • 尝试使用硒。错误我有:“消息:'浏览器似乎在我们连接之前已经退出。输出是:错误:没有指定显示\n'”当我使用普通的“firefox --newtab ”时也会发生这种情况链接”命令
  • 看起来要让firefox工作,我需要一个显示器,这在我的情况下是不可能的,因为这是一个VPS。有解决办法吗?如果我可以让 firefox 工作,那么我认为我不需要 selenium。
  • 我认为这是一个新问题。
  • 你错了。 lynx 支持的 JS,试试:lynx "www.google.ru/search?client=lynx&q=lynx&e=UTF-8&oe=UTF-8"
【解决方案2】:

Lynx 不支持 JavaScript,但基于 SpiderMonkey 的替代文本浏览器 ELinks 支持。不过,这有点实验性。请参阅manual 了解如何编译它。

另外,我真的很困惑你在这里想要完成什么......

【讨论】:

  • 你确定链接支持javascript吗?我得到的结果和 lynx 给我的结果一样。
  • 对不起,我弄错了。名为 Elinks 的 fork 确实在一定程度上支持 JavaScript,但 Ubuntu 中的版本没有启用它。
  • 似乎即使elinkslinks2 也需要[重新]编译某些开关以启用JavaScript。由 Ubuntu 的 apt-get 安装的那些肯定没有“开箱即用”的 JS 支持。
  • 你被否决了,因为你的回答 still 说链接支持 javascript,尽管在 cmets 中提到它不支持。
  • 显然,谢谢!改进了希望更正确的答案。
【解决方案3】:

您需要的是一个无头浏览器。例如PhantomJS 就是其中之一。我认为这是最受欢迎的。

【讨论】:

    【解决方案4】:

    如果您只想从命令行执行 Javascript,我建议您使用 nodejsotto 之类的方法。作为一个完整的无头浏览器,它的性能占用要小得多。

    如果您需要的不仅仅是普通的 Javascript,例如DOM 左右,您应该按照其他人的建议尝试 headless browser (Chrome, PhantomJS)。

    如果您不仅需要浏览器,而且想用该浏览器进行自动化测试Selenium 仍然是您的最佳选择。

    这真的取决于你的用例你需要多少。

    更新: 几个月后,现在可以使用Chrome as a headless Browser(Firefox 也在路上)。

    【讨论】:

      【解决方案5】:

      Selenium 是要走的路,但正如您所注意到的,它需要一个显示器。然后需要启动它,yada yada yada,现在你有一个相当复杂的设置!

      谢天谢地,还有另一种方法可以自动化所有这些,它是通过自动化框架。我推荐詹金斯。它已经有一个插件来启动一个 x 服务器。

      所以大概的流水线如下:

      • 忘记 crontab
      • 设置 jenkins ubuntu 服务器(安装了 x)
      • 安装 jenkins xvncserver(?) 插件——我想这就是它的名字。无论如何,这会自动为您启动一个 XHOST。
      • 编写转到相关位置的 selenium webdriver 脚本(最简单的 * 是使用 Selenium IDE)
      • 让 selenium IDE 将 webdriver 脚本输出为任何格式,然后让 jenkins 运行它。我个人使用Java格式,然后使用ant来构建。

      您可以想象,这是一个相当不错的设置,但从技术上讲,它会满足您的要求。对不起,它不像管道 wget 到 lynx 那样简单。

      另一种方法是将您的网页重写为 DO STUFF 而不假设浏览器,例如,获取将其置于“自动模式”的 GET 参数,然后它将假设它是从 cron 运行并通过更短的电路。

      【讨论】:

        猜你喜欢
        • 2014-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        相关资源
        最近更新 更多