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}
我有一个 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}