Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用javascript的Lynx_Linux_Browser Automation_Lynx - Fatal编程技术网

Linux 使用javascript的Lynx

Linux 使用javascript的Lynx,linux,browser-automation,lynx,Linux,Browser Automation,Lynx,所以我用PHP编写了一个脚本,需要javascript来运行它。我很难找到一个解决方案,即如何在使用一些linux工具的同时使用php运行javascript,使其自动化(因为在我的浏览器中运行它不是一个选择,我需要它是一个crontab)。使用“php”命令也不是一种选择,因为它不运行javascript。所以我找到了一个解决办法,那就是山猫 所以这就是我的问题:出于某种原因,javascript在我的浏览器中运行得很好,但在lynx中却不行。使用lynx,页面只是加载,没有任何javascr

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

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

编辑:


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

Lynx不支持Javascript

更新1


根据您对所做工作的总结(登录到需要JavaScript进行密码加密的站点),我强烈建议您考虑使用或其他浏览器自动化软件包。即使在没有这样一个图层的情况下,密码提交也能正常工作,但是如果你使用像Lynx这样的极简浏览器,网站可能会有其他问题。

Lynx不支持JavaScript,但是基于SpiderMonkey的替代文本浏览器支持JavaScript。虽然这有点实验性;请参阅中有关如何编译它的说明


另外,我真的很困惑你在这里想要实现什么…

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

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

因此,近似管道如下所示:

  • 忘掉crontab吧
  • 安装jenkins ubuntu服务器(安装了x)
  • 安装jenkins xvncserver(?)插件——我想这就是它的名称。无论如何,这将自动为您启动XHOST
  • 编写指向相关位置的selenium webdriver脚本(最简单的*是使用selenium IDE)
  • 让selenium IDE将webdriver脚本输出为任何格式,然后让jenkins运行它。我个人使用Java格式,然后使用ant构建它们
可以想象,这是一个相当复杂的设置,但从技术上讲,它可以满足您的要求。很抱歉,这并不像把wget传送到lynx那么简单


另一种方法是在不使用浏览器的情况下重写网页,例如,使用一个GET参数将其置于“自动模式”,然后它将假定它是从cron运行的,并通过一个较短的电路来实现它。

您需要的是一个无头浏览器。例如,他就是其中之一。我认为它是最流行的一种。

如果您只想从命令行执行Javascript,我会建议您执行类似或的操作。作为一个整体的无头浏览器,它的性能占用空间要小得多

如果您需要的不仅仅是简单的Javascript,例如DOM等,那么您应该按照其他人的建议尝试使用无头浏览器

如果您不仅需要一个浏览器,而且还想使用该浏览器进行自动化测试,那么仍然是一条路要走

这实际上取决于您的用例需要多少


更新:几个月后,现在就可以使用了(Firefox也即将推出)。

你最好使用浏览器自动化解决方案,如Selenium或我自己的库,在虚拟帧缓冲区(Xvfb)中实现。你到底想实现什么?其中一种情况可能并非如此:1)最好从Linux cron作业运行,2)最好通过web中加载的JavaScript运行page@sh-beta版,我尝试登录到一个使用javascript密码加密的站点,在将密码发送到服务器之前对其进行加密。由于我不想将整个库重写为php,我直接使用它们的javascript函数,加密密码,然后使用POST将其发送到服务器。@user1215232调整了我的答案以反映这一点(对于入站Google用户),现在,使用Node.js应该没问题。将共享逻辑放在不同的层中,并创建一个Node.js应用程序来使用它。浏览器应用程序也将使用该逻辑。然后,您可以使用crontab轻松地自动化Node.js应用程序。您确定链接支持javascript吗?我得到的结果和lynx给我的结果一样。对不起,我弄错了。名为Elinks的fork在某种程度上支持JavaScript,但Ubuntu中的版本没有启用它。似乎甚至
Elinks
links2
都需要使用某些开关重新编译以启用JavaScript。Ubuntu的apt get安装的那些当然没有“开箱即用”的JS支持。你被否决了,因为你的答案仍然说链接支持javascript,尽管评论中提到它不支持。显然,谢谢!改进了答案,希望更正确。尝试使用硒。我有错误:“消息:'在我们可以连接之前,浏览器似乎已经退出。输出是:错误:未指定显示\n'”当我使用普通的“firefox--newtab link”命令时也会发生这种情况。看起来要让firefox工作,我需要一个显示,这在我的情况下是不可能的,因为这是一个VPS。这有什么办法吗?如果我能让firefox工作,那么我认为我不需要selenium。我认为这是一个新问题。你错了。lynx支持的JS,请尝试:lynx“www.google.r