我使用的headless
和selenium-webdriver
宝石推出了无头的Firefox浏览器内工作然后,我在浏览器中访问'/'后发生错误:无头操作不西纳特拉路线
get '/' do
driver.navigate.to("http://google.com")
erb :root
end
的错误如下:
*** Errno::ECONNREFUSED Exception: Failed to open TCP connection to 127.0.0.1:7055 (Connection refused - connect(2) for "127.0.0.1" port 7055)
我敢肯定,这是因为driver.navigate
不被称为无头范围内,因此它不能连接到Firefox的实例。
我也尝试过使用模块化的sinatra风格,但发生了同样的错误。
解决方法
我最终什么事做的是分离的单独的脚本无头服务器。该脚本具有loop
并得到输入,在无头范围内打印运行命令的输出。然后从sinatra服务器,我使用PTY.spawn
实例化服务器并传递它的标准输入和标准输出,以便我可以在我的Sinatra应用程序中使用它。这样无头脚本只运行一次(因此多个无头服务器不会启动),我可以从我的Sinatra路线连接到它。我无法直接与无头脚本的变量或方法进行交互 - 我只需要使用I/O。
我希望它怎么样了如何使原代码工作,但(当西纳特拉应用程序的路由是在无头的范围内)的答案
我很欣赏这个建议,但是我无法连接到我的Sinatra服务器,因为它在无头的范围内运行。这可能是Nitrous的特定问题,我的代码正在运行的云环境。我将不得不尝试不同的环境。 –
:(我会在1天内删除这条评论,然后 – mudasobwa
很酷,我确实得到了它的工作,不需要使用'this = self'技巧,重要的是我只启动了一次无头浏览器所以我在一个单独的课上做了'start_headless'和'start_driver'方法 –