首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在辛纳屈路线内,无头作业不起作用

在辛纳屈路线内,无头作业不起作用
EN

Stack Overflow用户
提问于 2016-07-01 21:25:14
回答 2查看 307关注 0票数 4

我正在使用headlessselenium-webdriver宝石启动一个无头火狐浏览器:

代码语言:javascript
运行
复制
headless = Headless.new(
  video: {
    frame_rate: 12,
    codec: 'libx264'
  }
)
headless.start
driver = Selenium::WebDriver.for(:firefox)

使用这段代码,我可以编写以下代码:

代码语言:javascript
运行
复制
driver.navigate.to("http://google.com")

但是,在浏览器中访问“/”后,以下内容会引发错误:

代码语言:javascript
运行
复制
get '/' do
  driver.navigate.to("http://google.com")
  erb :root
end

错误如下:

代码语言:javascript
运行
复制
*** 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实例化服务器并传递它的stdin和stdout,以便在我的Sinatra应用程序中使用它。这样,无头脚本只能运行一次(因此没有启动多台无头服务器),我可以从我的Sinatra路由连接到它。我不能直接与无头脚本的变量或方法交互--我只需要使用i/o。

不过,我希望找到一个如何使原始代码工作的答案(当sinatra应用程序的路由在无头范围内被调用时)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-22 11:36:15

一个可能有帮助的窍门:

代码语言:javascript
运行
复制
this = self
get '/' do
  this.driver.navigate.to("http://google.com")
  erb :root
end
票数 2
EN

Stack Overflow用户

发布于 2016-08-01 18:36:47

我最终得到了这个工作。

起初,我认为修复的是在sinatra路由范围内进行无头环境初始化,即

get '/' { do_initialization_here }

真正的修复可能是我调用Headless.new的方式(最初,我有很多选项,并删除了所有选项)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38154053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档