我正在使用 watir webdriver 及其 headless 功能以及 firefox 浏览器转到网站,比如 www.xyz.com
。单击不同的按钮并下载 pdf。我已经在我的本地环境。当我将我的应用程序推送到 heroku 时,它要求构建包。我添加了构建包,它们存在于我的 heroku 中。我通过运行 heroku run bash
找到了它。
使用的依赖项是:
gem 'watir-webdriver', '~> 0.9.1'
gem 'headless', '~> 2.2', '>= 2.2.3'
Buildpack of Xvfb
Buildpack of firefox
Xvfb buildpack 工作正常。当运行 browser = Watir::Browser.new(:firefox, :profile => profile)
时,我收到奇怪的错误,例如 Selenium::WebDriver::Error::WebDriverError:无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1:7055)
或 为 firefox 设置路径
。我已经为 firefox Selenium::WebDriver::Firefox::Binary.path='vendor/firefox/firefox-bin'
设置了路径
.我可以在我的 heroku bash
中看到安装在该位置的 firefox。
我不确定这是 heroku 问题还是 buildpack 问题。尽管 buildpack 的开发者说他无法在 heroku 上运行他的 firefox buildpack
但他能够在 Amazon EC2 上部署
。是否可以在 heroku 上安装和使用 firefox 及其所有功能(如打开和关闭浏览器、下载 pdf、打开选项卡)?如果我的问题不太清楚,我很抱歉。
Firefox Buildpack .
begin
ActiveRecord::Base.transaction do
download_directory = "#{Rails.root}/tmp/#{dir_name}"
Selenium::WebDriver::Firefox::Binary.path='vendor/firefox/firefox-bin'
profile = Selenium::WebDriver::Firefox::Profile.new
profile['download.prompt_for_download'] = false
profile['browser.download.folderList'] = 2 # custom location
profile['browser.download.dir'] = download_directory
profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf"
# Disable built-in pdf viewer of Firefox browser
profile['pdfjs.disabled'] = true
profile['pdfjs.firstRun'] = false
headless = Headless.new
headless.start
browser = Watir::Browser.new(:firefox, :profile => profile)
# browser.screenshot.save "pp.png"
browser.goto 'xyz.com'
browser.window.resize_to(some_x,some_y)
browser.text_field(:name => "some_name").set("#{some_data}")
browser.text_field(:name => "some_password").set("#{password}")
browser.button(:name => "button").click
#Pdf gets downloaded in the defined location
#some database updations
headless.destroy
end
rescue => r
end
最佳答案
您不能在 heroku 上将 Firefox 用作 headless 浏览器。 Heroku 不支持此功能。您可以使用一些 JavaScript 浏览器,例如 Phantom js .
您可以在 heroku 上为 pantom js 配置 buildpack。 您需要进行一些代码更改,例如:
Selenium::WebDriver::PhantomJS.path = 'path_to_phantomjs'
client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 180 # seconds – default is 60
args = %w{--ignore-ssl-errors=true}
browser = Watir::Browser.new :phantomjs, :http_client => client, :args => args
关于ruby-on-rails - 我怎样才能在 heroku 上使用 firefox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167995/