Ruby 网络自动化失败

Ruby web automation is failing

我有一个 Ruby 自动化脚本,用于在 Linux 上使用 selenium-webdriver 和 watir-webdriver。

几天前,我的一个脚本崩溃了,从那时起,网络自动化就停止工作了。

我现在收到以下错误:

Headless display: :99
D, [2016-11-22T12:59:42.668070 #16284] DEBUG -- : end of file reached (EOFError)
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/protocol.rb:153:in `read_nonblock'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/protocol.rb:153:in `rbuf_fill'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/protocol.rb:134:in `readuntil'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/protocol.rb:144:in `readline'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http/response.rb:39:in `read_status_line'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http/response.rb:28:in `read_new'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1414:in `block in transport_request'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1411:in `catch'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1411:in `transport_request'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1384:in `request'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1377:in `block in request'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:853:in `start'
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1375:in `request'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/default.rb:103:in `response_for'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/default.rb:57:in `request'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/common.rb:59:in `call'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:653:in `raw_execute'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:124:in `create_session'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:88:in `initialize'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/chrome/bridge.rb:41:in `initialize'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/common/driver.rb:61:in `new'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/common/driver.rb:61:in `for'
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver.rb:82:in `for'
test.rb:18:in `<main>'

我尝试重新安装 selenium-webdriver 和 watir-webdriver gems,但没有帮助。

我将报错信息中的所有.rb文件与生产服务器上的文件进行了对比,完全一致

下面是我的测试代码 运行:

#!/bin/ruby

require 'rubygems'
require 'watir-webdriver'
require 'selenium-webdriver'
require 'headless'
require 'logger'

headless = Headless.new(autopick: true, reuse: false, destroy_at_exit: true).start
puts "Headless display: #{ENV['DISPLAY']}"

logger = Logger.new(STDOUT)
logger.level = Logger::DEBUG

begin
    client = Selenium::WebDriver::Remote::Http::Default.new
    client.timeout = 600 # seconds - default is 60
    d = Selenium::WebDriver.for :chrome, :http_client => client, :switches => %w[--disable-popup-blocking --disable-translate]
    b = Watir::Browser.new d

    saved_cookies = b.cookies.to_a

    site_url = 'https://www.google.com/'
    puts site_url
    b.goto site_url
    sleep 2
    b.close
    exit
rescue  => err
      logger.debug(err)
end

此代码在其他服务器上运行良好。 感觉好像有什么东西被破坏了,但我不知道是什么。

您很可能没有使用最新的 chromedriver(现在是 2.25)。确保您在这里得到正确的:https://sites.google.com/a/chromium.org/chromedriver/downloads

"watir-webdriver" 代码已重命名为 "watir",因此您应该升级以使用 Watir 6.0 和 require 'watir'

此外,您可以初始化 Watir::Browser 而无需先创建驱动程序:

client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 600
switches = %w[--disable-popup-blocking --disable-translate]
b = Watir::Browser.new :chrome, {http_client: client, switches: switches}