Giter VIP home page Giter VIP logo

heroku-buildpack-google-chrome's Introduction

heroku-buildpack-google-chrome

This buildpack downloads and installs (headless) Google Chrome from your choice of release channels.

Important

When used with Chromedriver, the Chromedriver version (installed by a different buildpack) falls out of sync with Chrome causing build failures.

Instead, please use Chrome for Testing buildpack, which installs matching Chrome + Chromedriver versions.

Channels

You can choose your release channel by specifying GOOGLE_CHROME_CHANNEL as a config var for your app, in your app.json (for Heroku CI and Review Apps), or in your pipeline settings (for Heroku CI).

Valid values are stable, beta, and unstable. If unspecified, the stable channel will be used.

Shims and Command Line Flags

This buildpack installs shims that always add --headless, --disable-gpu, --no-sandbox, and --remote-debugging-port=9222 to any google-chrome command as you'll have trouble running Chrome on a Heroku dyno otherwise.

You'll have two of these shims on your path: google-chrome and google-chrome-$GOOGLE_CHROME_CHANNEL. They both point to the binary of the selected channel.

Selenium

Caution

To use Selenium, do not install this buildpack.

Instead, please use Chrome for Testing buildpack, which installs matching Chrome + Chromedriver versions.

Releasing a new version

Make sure you publish this buildpack in the buildpack registry

heroku buildpacks:publish heroku/google-chrome master

heroku-buildpack-google-chrome's People

Contributors

aledustet avatar appleton avatar beauraf avatar benalavi avatar deioo avatar edmorley avatar fivetanley avatar gudmundur avatar jabrown85 avatar jaypinho avatar joeybrown-sf avatar joshwlewis avatar jsncmgs1 avatar kapoorlakshya avatar kwlockwo avatar mars avatar schneems avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

heroku-buildpack-google-chrome's Issues

How to start chrome with "--disable-translate"?

I think some of my pages are failing because Chrome is asking to translate said pages. Do I need to fork the gem to pass more options to the shim? Or is there a smart way to do that in my application?

Thank you for this helpful buildpack, I very much appreciate it existing.

Port issues

Having issues:

2017-05-09T16:43:16.127206+00:00 app[web.1]: WARN: { Error: spawn google-chrome-stable --remote-debugging-port=19409 ENOENT
2017-05-09T16:43:16.127212+00:00 app[web.1]:     at exports._errnoException (util.js:1050:11)
2017-05-09T16:43:16.127215+00:00 app[web.1]:     at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
2017-05-09T16:43:16.127216+00:00 app[web.1]:     at onErrorNT (internal/child_process.js:367:16)
2017-05-09T16:43:16.127217+00:00 app[web.1]:     at _combinedTickCallback (internal/process/next_tick.js:80:11)
2017-05-09T16:43:16.127217+00:00 app[web.1]:     at process._tickDomainCallback (internal/process/next_tick.js:128:9)
2017-05-09T16:43:16.127218+00:00 app[web.1]:     at Module.runMain (module.js:607:11)
2017-05-09T16:43:16.127219+00:00 app[web.1]:     at run (bootstrap_node.js:423:7)
2017-05-09T16:43:16.127220+00:00 app[web.1]:     at startup (bootstrap_node.js:147:9)
2017-05-09T16:43:16.127221+00:00 app[web.1]:     at bootstrap_node.js:538:3
2017-05-09T16:43:16.127221+00:00 app[web.1]:   code: 'ENOENT',
2017-05-09T16:43:16.127222+00:00 app[web.1]:   errno: 'ENOENT',
2017-05-09T16:43:16.127222+00:00 app[web.1]:   syscall: 'spawn google-chrome-stable --remote-debugging-port=19409',
2017-05-09T16:43:16.127223+00:00 app[web.1]:   path: 'google-chrome-stable --remote-debugging-port=19409',
2017-05-09T16:43:16.127223+00:00 app[web.1]:   spawnargs: [ '--remote-debugging-port=9222', '' ] }

Things I dont get:

a. Don't we get assigned a port when using any given Dyno? Meaning - having this buildpack default to port 9222 is kinda inconvenient? I would love to be educated on this :(

b. Im using the build pack and it cant find the binary :( How fix?

how to add it to the dyno?

Would be great if you add a simple one-liner to the README, explaining how to add this buildpack to the dyno. Now I have no idea how to do it.

Not compatible with heroku-18

We'd like to upgrade from heroku-16 to heroku-18, but our test suite depends on this buildpack. Any change this buildpack could be made compatible?

STACK must be 'cedar-14' or 'heroku-16', not 'heroku-18.'

“Cannot connect to browser: { Error: connect ECONNREFUSED 127.0.0.1:9222 ...”

Possibly same/related to issue #2, but how do I actually start Chrome on Heroku?

My buildpacks:

1. https://github.com/heroku/heroku-buildpack-google-chrome
2. heroku/nodejs

My Procfile:

web: node app/server.js

In runtime, I get this error:

Cannot connect to browser: { Error: connect ECONNREFUSED 127.0.0.1:9222 
    at Object.exports._errnoException (util.js:1020:11) 
    at exports._exceptionWithHostPort (util.js:1043:20) 
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14) 
  code: 'ECONNREFUSED', 
  errno: 'ECONNREFUSED', 
  syscall: 'connect', 
  address: '127.0.0.1', 
  port: 9222 } 

Headless Chrome hangs up forever

Hi Heroku!

I just created a new Rails app and I added one system test using headless Chrome. The test suite run perfectly well on localhost but in Heroku CI hangs up forever. I followed a few setups and configurations that I've seen around, however, I always end up in the same point.

heroku ci:debug --pipeline foo

$ bundle exec rspec spec/system/react_status_spec.rb 
DEPRECATION WARNING: Single arity template handlers are deprecated. Template handlers must
now accept two parameters, the view object and the source for the view object.
Change:
  >> JbuilderHandler.call(template)
To:
  >> JbuilderHandler.call(template, source)
 (called from <top (required)> at /app/config/environment.rb:7)
DEPRECATION WARNING: Single arity template handlers are deprecated. Template handlers must
now accept two parameters, the view object and the source for the view object.
Change:
  >> JbuilderHandler.call(template)
To:
  >> JbuilderHandler.call(template, source)
 (called from <main> at /app/config/environment.rb:7)
Capybara starting Puma...
* Version 3.12.1 , codename: Llamas in Pajamas
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:46206

DevTools listening on ws://127.0.0.1:9222/devtools/browser/21f03248-bfc5-4fbc-8b07-542888f4ac9e

It hangs up indefinitely after displaying DevTools listening on ws://127.0.0.1:9222/devtools/browser/21f03248-bfc5-4fbc-8b07-542888f4ac9e. It never times out or displays an error.

This is Capybara-Chrome driver configuration

# frozen_string_literal: true

require 'selenium/webdriver'
require 'capybara-screenshot/rspec'
Capybara.javascript_driver = :selenium_chrome_headless

Capybara::Screenshot.register_driver(:selenium_chrome_headless) do |driver, path|
  driver.browser.save_screenshot(path)
end

RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by(:rack_test)
  end

  config.before(:each, type: :system, js: true) do
    driven_by(:selenium_chrome_headless)
  end
end

This is my app.json heroku Ci file

  "environments": {
    "test": {
      "addons": [
        "heroku-postgresql"
      ],
      "scripts": {
        "test": "bundle exec rspec"
      },
      "formation": {
        "test": {
          "quantity": 1,
          "size": "standard-1x"
        }
      },
      "buildpacks": [
        { "url": "heroku/ruby" },
        { "url": "heroku/nodejs" },
        { "url": "https://github.com/heroku/heroku-buildpack-google-chrome" },
        { "url": "https://github.com/heroku/heroku-buildpack-chromedriver" }
      ]
    }
  }

Any ideas of what is causing this problem?

Thank you very much in advance ❤️

Chrome crashes when started with ChromeDriver

This is a blocking issue to make proper E2E tests with Heroku CI.

It also happens on the Xvfb version.

Here's what happens:

  • Chrome crashes when its started through ChromeDriver (v2.9, latest version).
  • This issue happens on regular dynos and on Heroku CI.
  • It crashes on Heroku-16 AND Cedar-14 stacks.

How to reproduce:

You should observe some logs like those:

Starting ChromeDriver (v2.9.248304) on port 9515
[1.935][INFO]: COMMAND InitSession {
   "desiredCapabilities": {
      "browserName": "chrome",
      "chromeOptions": {
         "binary": "/app/.apt/opt/google/chrome/chrome"
      },
      "platform": "ANY"
   }
}
[1.936][INFO]: Populating Preferences file: {
   "alternate_error_pages": {
      "enabled": false
   },
   "autofill": {
      "enabled": false
   },
   "browser": {
      "check_default_browser": false
   },
   "distribution": {
      "import_bookmarks": false,
      "import_history": false,
      "import_search_engine": false,
      "make_chrome_default_for_user": false,
      "show_welcome_page": false,
      "skip_first_run_ui": true
   },
   "dns_prefetching": {
      "enabled": false
   },
   "profile": {
      "content_settings": {
         "pattern_pairs": {
            "https://*,*": {
               "media-stream": {
                  "audio": "Default",
                  "video": "Default"
               }
            }
         }
      },
      "default_content_settings": {
         "geolocation": 1,
         "mouselock": 1,
         "notifications": 1,
         "popups": 1,
         "ppapi-broker": 1
      },
      "password_manager_enabled": false
   },
   "safebrowsing": {
      "enabled": false
   },
   "search": {
      "suggest_enabled": false
   },
   "translate": {
      "enabled": false
   }
}
[1.936][INFO]: Populating Local State file: {
   "background_mode": {
      "enabled": false
   },
   "ssl": {
      "rev_checking": {
         "enabled": false
      }
   }
}
[1.940][INFO]: Launching chrome: /app/.apt/opt/google/chrome/chrome --disable-background-networking --disable-client-side-phishing-detection --disable-component-update --disable-default-apps --disable-hang-monitor --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-logging --full-memory-crash-report --ignore-certificate-errors --load-extension=/tmp/.com.google.Chrome.veS6aG/internal --logging-level=1 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12096 --safebrowsing-disable-auto-update --safebrowsing-disable-download-protection --use-mock-keychain --user-data-dir=/tmp/.com.google.Chrome.1uGB8U data:,
[1.940][DEBUG]: DevTools request: http://127.0.0.1:12096/json/version
[1.943][WARNING]: PAC support disabled because there is no system implementation
[12:12:0507/153325.123514:FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /app/.apt/opt/google/chrome/chrome-sandbox is owned by root and has mode 4755.
[2.216][DEBUG]: DevTools request failed
[2.266][DEBUG]: DevTools request: http://127.0.0.1:12096/json/version
[2.267][DEBUG]: DevTools request failed
[2.317][DEBUG]: DevTools request: http://127.0.0.1:12096/json/version
[2.317][DEBUG]: DevTools request failed
[2.367][DEBUG]: DevTools request: http://127.0.0.1:12096/json/version
...
...
...
[61.843][DEBUG]: DevTools request: http://127.0.0.1:12096/json/version
[61.843][DEBUG]: DevTools request failed
[61.893][DEBUG]: DevTools request: http://127.0.0.1:12096/json/version
[61.894][DEBUG]: DevTools request failed
[61.944][DEBUG]: DevTools request: http://127.0.0.1:12096/json/version
[61.944][DEBUG]: DevTools request failed
[61.945][INFO]: RESPONSE InitSession unknown error: Chrome failed to start: crashed
[61.945][DEBUG]: Log type 'driver' lost 0 entries on destruction
[61.945][DEBUG]: Log type 'browser' lost 0 entries on destruction

And the cURL response:

{
    "sessionId": "0cfc4cfca134778cc3a79343c18c9077",
    "status": 13,
    "value": {
        "message": "unknown error: Chrome failed to start: crashed\n  (Driver info: chromedriver=2.9.248304,platform=Linux 3.13.0-112-generic x86_64)"
    }
}

Missing libxrender on heroku-18

Hi,

I have had some issues running this build pack lately. One thing I tried was to run it with heroku-18, but then it complains about missing libxrender1.
According to https://devcenter.heroku.com/articles/stack-packages libxrender is only included at build time for heroku-18, while it is also included at run time for heroku-16. And according to
https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#chrome-headless-doesnt-launch
it is a required dependency. So I guess this needs to be added to a heroku-18 build? Or did I miss something?

Chrome crashes when using save_screenshot on Heroku

I have a job in my app that opens chrome, navigates to a page and takes a screenshot. It works fine when the window is set to 800x1200 (~2MB resulting file size), but not when it's set to 1890x2835 (~8MB resulting file size). This problem happens in Heroku but not my machine.

I've tried having the page only occupy 800x1200 and taking the screenshot with the window set to 1890x2835 and it worked. So it seems that chrome is running into some sort of memory problem in Heroku. A comment here indicates it is related to the size of the /dev/shm in docker images (I think heroku uses it for dynos?) and that resizing it fixes the error.

Info
Stack: Heroku-18
Gems: selenium-webdriver (3.141.0), chromedriver-helper (2.1.0)
Ruby: 2.5.3
Jemalloc: 3.6

Buildpacks

  1. https://github.com/heroku/heroku-buildpack-apt
  2. https://github.com/gaffneyc/heroku-buildpack-jemalloc.git
  3. https://github.com/heroku/heroku-buildpack-chromedriver.git
  4. https://github.com/heroku/heroku-buildpack-google-chrome.git
  5. heroku/ruby

Sample Code:
You can use the url in the code, it's the one I'm trying to take a screenshot of.

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.binary = ENV.fetch('GOOGLE_CHROME_SHIM', nil)

begin
  driver = Selenium::WebDriver.for :chrome, options: options
  driver.manage.window.resize_to(1890, 2835)
  driver.manage.timeouts.page_load = 30

  driver.navigate.to "https://festalab-app-staging.herokuapp.com/eventos/QkFocEF6WUVEQT09LS00ZTZhMjdjYmMzNDM3YmVjY2UyMjY5M2NlZGEwNmYzNjIxNDI0ZDFj/convite"
  driver.save_screenshot Rails.root.join('tmp', "event_invitation.png")
ensure
  driver.quit if driver.present?
end

Traceback:

Selenium::WebDriver::Error::UnknownError (unknown error: session deleted because of page crash)
from unknown error: cannot determine loading status
from tab crashed
  (Session info: headless chrome=72.0.3626.119)
  (Driver info: chromedriver=2.46.628388 (4a34a70827ac54148e092aafb70504c4ea7ae926),platform=Linux 4.4.0-1038-aws x86_64)

apt is using deprecated force-yes flags

On every run I receive this warning:

W: --force-yes is deprecated, use one of the options starting with --allow instead.

Would it be possible to switch to the allow flag to reduce build log noise?

Net::ReadTimeout via Selenium/Capybara

I keep getting Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)> when run via Capybara.
I have the heroku-buildpack-google-chrome build pack, with webdrivers-gem.

It works when directly running on a heroku dyno (from localhost heroku ci:debug --pipeline release-pipeline):

$ irb
> require 'webdrivers'
> Selenium::WebDriver::Chrome.path = ENV.fetch('GOOGLE_CHROME_SHIM', nil)
> driver = Selenium::WebDriver.for :chrome
> driver.navigate.to "http://google.com"
> puts driver.title
Google

But from rspec it errors (compacted log)

$ bundle exec rspec spec/features
...
     1.2) Failure/Error: (io = @io.to_io).wait_readable(@read_timeout) or raise Net::ReadTimeout.new(io)

          Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
          # /app/vendor/ruby-2.7.0/lib/ruby/2.7.0/net/protocol.rb:217:in `rbuf_fill'
          # /app/vendor/bundle/ruby/2.7.0/gems/webmock-3.7.6/lib/webmock/http_lib_adapters/net_http.rb:285:in `rbuf_fill'
          # /app/vendor/ruby-2.7.0/lib/ruby/2.7.0/net/protocol.rb:191:in `readuntil'
          # /app/vendor/bundle/ruby/2.7.0/gems/webmock-3.7.6/lib/webmock/http_lib_adapters
          # /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/default.rb:129:in `response_for'

rspec config when ran on Heroku (not active when ran locally) :

  chrome_shim = ENV.fetch("GOOGLE_CHROME_SHIM", nil)

  # Required for webdrivers
  Selenium::WebDriver::Chrome.path = chrome_shim

  chrome_opts = { "chromeOptions" => { "binary" => chrome_shim } }

  Capybara.register_driver :headless_chrome do |app|
    Capybara::Selenium::Driver.new(
      app,
      browser: :chrome,
      desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(chrome_opts)
    )
  end

  Capybara.javascript_driver = :headless_chrome

Using

  gem 'capybara', '>= 2.15'
  gem 'webdrivers', '~> 4.0'

logs with Webdrivers.logger.level & Selenium::WebDriver.logger.level = :debug

I've cross posted this to SO as well https://stackoverflow.com/questions/59723188/get-readtimeout-using-webdrivers-selenium-on-heroku

Build speed

Adding `heroku/heroku-buildpack-google-chrome' to the buildpack list works like a charm, but it takes quite a white to install. Is there a way this could be sped up or caching leveraged somehow?

Add precompiled binary to buildpack

Unless I'm doing it pretty wrong, it seems that adding this buildpack substantially increases deploy times because chrome and its deps have to get downloaded every deploy.

Does it make sense/is it feasible to precompile all the relevant binaries and include them in the buildpack? This is what the nginx buildpack does.

Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9515

Trying to run this on Heroku – I've installed this buildpack and this one as well. I set my driver_path like Selenium::WebDriver::Chrome.driver_path=ENV['GOOGLE_CHROME_BIN'] => "/app/.apt/opt/google/chrome/chrome" but when I run Watir::Browser.new :chrome or Watir::Browser.new :chrome, headless:true I still get Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9515

Any ideas?

Print to PDF blocked by default switches in shim

Using headless mode to print to PDF, Chrome tells me "ERROR:headless_shell.cc(473)] Print to PDF is disabled when remote debugging is enabled." The error is thrown here: https://chromium.googlesource.com/chromium/src/+/lkgr/headless/app/headless_shell.cc#488.

Running
/app/.apt/opt/google/chrome/chrome --headless --print-to-pdf --disable-gpu --no-sandbox http://example.com
works fine, so the issue seems to result from the --remote-debugging-port=9222 being passed by the buildpack's shim.

The README mentions that users would have trouble running Chrome on a dyno without these switches. Is it still generally true that the --remote-debugging-port is essential to using Chrome's headless functionality?

DevToolsActivePort file doesn't exist.

I`m trying to run selenium with chromedriver (with python) on heroku and I'm getting this error:

Traceback (most recent call last):
...
  File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 75, in __init__
    desired_capabilities=desired_capabilities)
  File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 156, in __init__
    self.start_session(capabilities, browser_profile)
  File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 245, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 314, in execute
    self.error_handler.check_response(response)
  File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist
  (Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.4.0-1019-aws x86_64)

I added the builpack for chromedriver (https://github.com/heroku/heroku-buildpack-chromedriver) and added the following config keys:

GOOGLE_CHROME_BIN:        /app/.apt/usr/bin/google-chrome
CHROMEDRIVER_PATH:        /app/.chromedriver/bin/chromedriver

I've tried locally and in heroku (with a builpack fork) without the --remote-debugging option=9222. It worked locally, but it didn't work on heroku.
Can I get some help here?

Intermittent page crashes with puppeteer

I'm trying to take screenshots via puppeteer, but I get intermittent Error: Page crashed! errors. It crashes more frequently when there are more images on the page, so I'm assuming that there's some sort of chrome memroy issue, but I'm no expert.

I'm running on the "hobby" tier.

I'm launching puppeteer this way:

  const browser = await puppeteer.launch({
    args: [
      '--remote-debugging-port=9222',
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-gpu',
    ],
    dumpio: true,
  })

The errors aren't very helpful, but here's one:

2018-01-12T11:34:11.526008+00:00 app[web.1]: Error: Page crashed!
2018-01-12T11:34:11.526011+00:00 app[web.1]:     at Page._onTargetCrashed (/app/node_modules/puppeteer/node6/Page.js:128:24)
2018-01-12T11:34:11.526012+00:00 app[web.1]:     at Session.Page.client.on.event (/app/node_modules/puppeteer/node6/Page.js:123:56)
2018-01-12T11:34:11.526013+00:00 app[web.1]:     at emitOne (events.js:96:13)
2018-01-12T11:34:11.526014+00:00 app[web.1]:     at Session.emit (events.js:188:7)
2018-01-12T11:34:11.526015+00:00 app[web.1]:     at Session._onMessage (/app/node_modules/puppeteer/node6/Connection.js:288:12)
2018-01-12T11:34:11.526016+00:00 app[web.1]:     at Connection.<anonymous> (/app/node_modules/puppeteer/node6/Connection.js:157:19)
2018-01-12T11:34:11.526017+00:00 app[web.1]:     at next (native)
2018-01-12T11:34:11.526017+00:00 app[web.1]:     at step (/app/node_modules/puppeteer/node6/Connection.js:120:24)
2018-01-12T11:34:11.526018+00:00 app[web.1]:     at Promise (/app/node_modules/puppeteer/node6/Connection.js:138:12)
2018-01-12T11:34:11.526019+00:00 app[web.1]:     at new Promise (/app/node_modules/core-js/modules/es6.promise.js:164:7)

Thanks for your assistance.

EDIT: Oh, and I haven't tried running Docker locally, but the problem seems similar to many Docker users.

Heroku : error while loading shared libraries: libX11-xcb.so.1, failed to launch chrome

Hello,

I'm trying to launch a puppeteer script using heroku and I did everything properly, I use these buildbacks:
1. https://github.com/heroku/heroku-buildpack-chromedriver 2. https://github.com/jontewks/puppeteer-heroku-buildpack 3. heroku/nodejs

But I'm still getting this error :

Error: Failed to launch chrome!
/app/node_modules/puppeteer/.local-chromium/linux-526987/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory

Chrome doesn't run on the heroku-16 stack

The common error looks like this:

/app/.apt/opt/google/chrome/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory

For now, the workaround is to use the cedar-14 stack.

For Heroku CI, add this to your app.json:

"stack": "cedar-14"

For a normal build:

heroku stack:set cedar-14

unknown error: Chrome failed to start: exited abnormally

Hi Heroku
Over night my tests have started to fail (only on Heroku Pipeline) with the following error:

Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: exited abnormally (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /app/.apt/usr/bin/google-chrome-stable is no longer running, so ChromeDriver is assuming that Chrome has crashed.) (Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.4.0-1027-aws x86_64)

Nothing has changed in our setup and it seems like the only buildpack that has changed is this.

You have updated the main file, but not updated the changelog, how do I roll back and use the old version?

Can't find CHROME_BIN

I configured the CI to use this buildpack:

{
  "environments": {
    "test": {
      "buildpacks": [
        {
          "url": "https://github.com/heroku/heroku-buildpack-ruby"
        },
        {
          "url": "https://github.com/heroku/heroku-buildpack-nodejs"
        },
        {
          "url": "https://github.com/heroku/heroku-buildpack-google-chrome"
        }
      ]
    }
  }
}

and updated my package.json command to account for the different environment variable: CHROME_BIN=$GOOGLE_CHROME_BIN ng test --browsers=ChromeHeadlessCI --watch=false --code-coverage=false but I still get the error:

       All files pass linting.
       $ CHROME_BIN=$GOOGLE_CHROME_BIN ng test --browsers=ChromeHeadlessCI --watch=false --code-coverage=false
       17 07 2019 23:02:08.016:INFO [karma-server]: Karma v4.1.0 server started at http://0.0.0.0:9876/
       17 07 2019 23:02:08.033:INFO [launcher]: Launching browsers ChromeHeadlessCI with concurrency unlimited
       17 07 2019 23:02:08.069:INFO [launcher]: Starting browser ChromeHeadless
       17 07 2019 23:02:08.070:ERROR [launcher]: No binary for ChromeHeadless browser on your platform.
         Please, set "CHROME_BIN" env variable.

I am testing from my local with heroku ci:debug.

When I Cmd+c the hung process, I'm left on the server. If i run $ export I see no env variables for GOOGLE_X.

buildpack no longer works with cedar-14 stack

Chrome suddenly stopped working on our cedar-14 dynos yesterday after a redeploy. Bashing into one and trying to launch chrome reported the following error:

~ $ google-chrome
/app/.apt/opt/google/chrome/chrome: error while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory

To fix this I ended up manually copying the heroku-16 packages in this buildpack and installing them during slug compilation. One or more of them was required to fix this (installing gconf alone was not good enough.)

CACHE_DIR=$2
APT_CACHE_DIR="$CACHE_DIR/apt/cache"
APT_STATE_DIR="$CACHE_DIR/apt/state"
APT_OPTIONS="-o debug::nolocking=true -o dir::cache=$APT_CACHE_DIR -o dir::state=$APT_STATE_DIR"
PACKAGES="libxss1 libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxi6 libxtst6 libnss3 libgconf-2-4 libxrandr2 libasound2 libatk1.0-0 libgtk2.0-0 libgtk-3-0 libxinerama1 libcairo-gobject2"
for PACKAGE in $PACKAGES; do
apt-get $APT_OPTIONS -y --force-yes -d install --reinstall $PACKAGE
done

I think there may have been a change in either the cedar-14 stack or chrome itself which requires additional dependencies, and until this buildpack is updated it's no longer compatible with cedar-14

Can't find CHROME_BIN

I configured the CI to use this buildpack:

{
  "environments": {
    "test": {
      "buildpacks": [
        {
          "url": "https://github.com/heroku/heroku-buildpack-ruby"
        },
        {
          "url": "https://github.com/heroku/heroku-buildpack-nodejs"
        },
        {
          "url": "https://github.com/heroku/heroku-buildpack-google-chrome"
        }
      ]
    }
  }
}

and updated my package.json command to account for the different environment variable: CHROME_BIN=$GOOGLE_CHROME_BIN ng test --browsers=ChromeHeadlessCI --watch=false --code-coverage=false but I still get the error:

       All files pass linting.
       $ CHROME_BIN=$GOOGLE_CHROME_BIN ng test --browsers=ChromeHeadlessCI --watch=false --code-coverage=false
       17 07 2019 23:02:08.016:INFO [karma-server]: Karma v4.1.0 server started at http://0.0.0.0:9876/
       17 07 2019 23:02:08.033:INFO [launcher]: Launching browsers ChromeHeadlessCI with concurrency unlimited
       17 07 2019 23:02:08.069:INFO [launcher]: Starting browser ChromeHeadless
       17 07 2019 23:02:08.070:ERROR [launcher]: No binary for ChromeHeadless browser on your platform.
         Please, set "CHROME_BIN" env variable.

I am testing from my local with heroku ci:debug.

When I Cmd+c the hung process, I'm left on the server. If i run $ export I see no env variables for GOOGLE_X.

~ $ export
declare -x CI="true"
declare -x CI_NODE_INDEX="0"
declare -x CI_NODE_TOTAL="1"
declare -x DYNO="test.2156"
declare -x HEROKU_SUPPRESS_LOGGING="true"
declare -x HEROKU_TEST_CACHE_GET_URL="https://heroku-profa-production-buildcache.s3.amazonaws.com/6292/test-cache/6292443e-5d49-45ba-9709-646297984c1b.tar.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJUFFK4UMRJLGKCXA%2F20190717%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190717T225444Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=b29774c8934e9e9f0a6a1a8c98ece49e48a49fc72703ebc00e4c98e21463fb22"
declare -x HEROKU_TEST_RUN_BRANCH="github"
declare -x HEROKU_TEST_RUN_COMMIT_VERSION="1718912daac6994beaf61f25fd4abf1d62ca877c"
declare -x HEROKU_TEST_RUN_ID="7fd9bc81-5548-4a18-b70f-b0fbcff156a8"
declare -x HEROKU_TEST_RUN_MANIFEST="{\"buildpacks\":[{\"url\":\"https://github.com/heroku/heroku-buildpack-ruby\"},{\"url\":\"https://github.com/heroku/heroku-buildpack-nodejs\"},{\"url\":\"https://github.com/heroku/heroku-buildpack-google-chrome\"}]}"
declare -x HEROKU_TEST_RUN_NUMBER="17"
declare -x HOME="/app"
declare -x NPM_TOKEN="XCvGXUwLi5qdtZon7yJzdBLLGG46lZ8OAfegH+88mSNbosYVPWgLe8VO3LjEmhGW"
declare -x OLDPWD
declare -x PATH="/usr/local/bin:/usr/bin:/bin:/app/.sprettur/bin/"
declare -x PORT="54279"
declare -x PS1="\\[\\033[01;34m\\]\\w\\[\\033[00m\\] \\[\\033[01;32m\\]\$ \\[\\033[00m\\]"
declare -x PWD="/app"
declare -x SHLVL="2"
declare -x STACK="heroku-18"
declare -x TERM="dumb"
~ $ whoami
u32622
~ $ ls /app/.apt/usr/bin/google-chrome
ls: cannot access '/app/.apt/usr/bin/google-chrome': No such file or directory

Any ideas?

Support RHEL stack

We would like to use RHEL as our stack, which means we can't use this buildpack. Could we add some conditions for running the buildpack using RHEL compliant commands?

"exited abnormally"

Hi, I've tried many times with Watir/Capybara, but constantly getting this error ...

my code:

  Capybara::Selenium::Driver.new(
     app,
     browser: :chrome,
     desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(
     	'chromeOptions' => {
    	'binary' => "/app/.apt/usr/bin/google-chrome",
	      'args' => [
	      	"--headless"
	      ]
	    }
     )
  )
end

Capybara.configure do |config|
  config.run_server = false
  config.default_driver = :chrome
  config.app_host = 'https://www.google.com' # change url
end

browser = Capybara.current_session
browser.visit "https://www.google.com"

the response:

  (Driver info: chromedriver=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5),platform=Linux 3.13.0-112-generic x86_64)
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:678:in `raw_execute'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:110:in `create_session'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:73:in `initialize'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/chrome/bridge.rb:52:in `initialize'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/common/driver.rb:61:in `new'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/common/driver.rb:61:in `for'
	from /app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver.rb:88:in `for'
	from /app/vendor/bundle/ruby/2.3.0/gems/capybara-2.14.0/lib/capybara/selenium/driver.rb:22:in `browser'
	from /app/vendor/bundle/ruby/2.3.0/gems/capybara-2.14.0/lib/capybara/selenium/driver.rb:62:in `visit'
	from /app/vendor/bundle/ruby/2.3.0/gems/capybara-2.14.0/lib/capybara/session.rb:269:in `visit'
	from (irb):55
	from /app/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/commands/console.rb:110:in `start'
	from /app/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/commands/console.rb:9:in `start'
	from /app/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/commands/commands_tasks.rb:68:in `console'
	from /app/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
	from /app/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/commands.rb:17:in `<top (required)>'
	from bin/rails:8:in `require'
	from bin/rails:8:in `<main>'```

google-chrome no longer running

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.                                    
  (unknown error: DevToolsActivePort file doesn't exist)                                                                                             
  (The process started from chrome location /app/.apt/usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed
.)       

Getting the above error in my python script. Have been running the same script for the past year or so, so I'm guessing something updated with Chrome but that wasn't updated in this buildpack.

Screen Shot 2020-04-08 at 2 40 35 AM

*Note I would have received a different error if there were a mismatch between the chromedriver version and the version of chrome. E.g. (when running locally to force the error):

Message: session not created: This version of ChromeDriver only supports Chrome version 78

and my previously working python code:

options = webdriver.ChromeOptions()
options.binary_location = os.environ.get("GOOGLE_CRHOME_BIN")
options.add_argument("--no-sandbox")
options.add_argument("--headless")
options.add_argument("--disable-dev-shm-usage")
options.add_argument('--disable-gpu')

the_path = os.environ.get("CHROMEDRIVER_PATH")
driver = webdriver.Chrome(executable_path=the_path, options=options)

How to disable auto-update?

Hey guys I'm doing a project that would require using chromedriver, and i wanted to know how to disable auto-update from heroku's google chrome so it would not become incompatible.(PS:First time asking something on github so i dont konow if it's the right section)

Chrome not reachable

@ABrown85 - I am creating a new issue, to try to bring it into focus. If we resolve this, I will close out my other comments on #56 and #59.

Environment:
Heroku, Stack 16
ruby 2.4.4p296
Rails 4.2.10

Environment
`production' (app, vs testing)

Gems
gem 'capybara'
gem 'capybara-selenium'

Buildpacks:
heroku/ruby
https://github.com/heroku/heroku-buildpack-chromedriver
https://github.com/heroku/heroku-buildpack-google-chrome

Code (Ruby console):
irb(main):001:0> Capybara.current_session.visit('http://yahoo.com')
irb(main):001:0> Capybara.current_session.find('#some_element')

Error:
Selenium::WebDriver::Error::WebDriverError: chrome not reachable (Session info: headless chrome=69.0.3497.100) (Driver info: chromedriver=2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac),platform=Linux 4.4.0-1027-aws x86_64) from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/response.rb:69:in assert_ok'
from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/response.rb:32:in initialize' from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/http/common.rb:84:in new'
from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/http/common.rb:84:in create_response' from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/http/default.rb:104:in request'
from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/http/common.rb:62:in call' from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/bridge.rb:164:in execute'
from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/oss/bridge.rb:584:in execute' from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/oss/bridge.rb:562:in find_elements_by'
from /app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/search_context.rb:78:in find_elements' from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/selenium/driver.rb:76:in find_css'
from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/node/base.rb:98:in find_css' from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/queries/selector_query.rb:137:in find_nodes_by_selector_format'
from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/queries/selector_query.rb:102:in block in resolve_for' from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/node/base.rb:77:in synchronize'
from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/queries/selector_query.rb:101:in resolve_for' from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/node/finders.rb:288:in block in synced_resolve'
from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/node/base.rb:82:in synchronize' from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/node/finders.rb:286:in synced_resolve'
from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/node/finders.rb:33:in find' from /app/vendor/bundle/ruby/2.4.0/gems/capybara-3.7.2/lib/capybara/session.rb:728:in block (2 levels) in class:Session'
from (irb):2
from /app/vendor/bundle/ruby/2.4.0/gems/railties-4.2.10/lib/rails/commands/console.rb:110:in start' from /app/vendor/bundle/ruby/2.4.0/gems/railties-4.2.10/lib/rails/commands/console.rb:9:in start'
from /app/vendor/bundle/ruby/2.4.0/gems/railties-4.2.10/lib/rails/commands/commands_tasks.rb:68:in console' from /app/vendor/bundle/ruby/2.4.0/gems/railties-4.2.10/lib/rails/commands/commands_tasks.rb:39:in run_command!'
from /app/vendor/bundle/ruby/2.4.0/gems/railties-4.2.10/lib/rails/commands.rb:17:in <top (required)>' from /app/bin/rails:9:in require'
from /app/bin/rails:9:in <main>' irb(main):003:0>

This code is running perfectly in Mac OSX, but I have not been able to deploy it to Heroku.

Please let me know your thoughts.

Thanks again,
Martin

Selenium::WebDriver::Error::WebDriverError (Could not find Firefox binary (os=linux). Make sure Firefox is installed or set the path manually with Selenium::WebDriver::Firefox::Binary.path=)

I'm really not understanding. Why this error is happing? I setted chrome as browser.

Selenium::WebDriver::Chrome.driver_path = "#{Rails.root.join('lib', 'chromedriver')}"
chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil)
chrome_opts = chrome_bin ? { "chromeOptions" => { "binary" => chrome_bin } } : {}
Capybara.register_driver :chrome do |app|
   Capybara::Selenium::Driver.new(
      app,
      :chrome,
      desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(chrome_opts)
   )
end

@session = Capybara::Session.new(:selenium)
@session.visit("https://www.google.com/")

When I run this code, I'm receiving this error:

2018-05-10T18:51:27.040801+00:00 app[web.1]: F, [2018-05-10T18:51:27.040717 #4] FATAL -- : [a6f3abd4-eb65-4517-aaaf-c6220c4e345a] Selenium::WebDriver::Error::WebDriverError (Could not find Firefox binary (os=linux). Make sure Firefox is installed or set the path manually with Selenium::WebDriver::Firefox::Binary.path=):
2018-05-10T18:51:27.040872+00:00 app[web.1]: F, [2018-05-10T18:51:27.040795 #4] FATAL -- : [a6f3abd4-eb65-4517-aaaf-c6220c4e345a]   
2018-05-10T18:51:27.040914+00:00 app[web.1]: F, [2018-05-10T18:51:27.040875 #4] FATAL -- : [a6f3abd4-eb65-4517-aaaf-c6220c4e345a] lib/process_aet.rb:51:in `do_login'
2018-05-10T18:51:27.040916+00:00 app[web.1]: [a6f3abd4-eb65-4517-aaaf-c6220c4e345a] app/controllers/service_orders_controller.rb:131:in `process_aet'

In lib/process_aet.rb:51:

@session.visit("https://www.google.com/")

Can I help me? Why this error is occurring?

Cannot start Chrome error

Heroku CI tests with Karma and Chrome on a review app stopped working, with this output to the test log:

20 09 2018 13:08:41.460:ERROR [launcher]: Cannot start Chrome

	/app/.apt/opt/google/chrome/chrome: symbol lookup error: /app/.apt/usr/lib/x86_64-linux-gnu/libatk-1.0.so.0: undefined symbol: g_log_structured_standard

20 09 2018 13:08:41.460:ERROR [launcher]: Chrome stdout:

20 09 2018 13:08:41.462:ERROR [launcher]: Chrome stderr: /app/.apt/opt/google/chrome/chrome: symbol lookup error: /app/.apt/usr/lib/x86_64-linux-gnu/libatk-1.0.so.0: undefined symbol: g_log_structured_standard

The solution I finally found is to run the tests without cache. Can this issue be fixed, or can a note be added to the test log and/or documentation to spare others a trip into the rabbit hole? Thanks.

Fail to set user agent correctly

$ heroku stack -r tech
=== ⬢ testapp Available Stacks
* heroku-16
  cedar-14
  container
$ heroku buildpacks
=== Buildpack URLs
1. heroku/ruby
2. https://github.com/heroku/heroku-buildpack-google-chrome
3. https://github.com/heroku/heroku-buildpack-chromedriver
$ cat bin/test
#!/usr/bin/env ruby

puts ENV['AGENT'] # =>Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:57.0) Gecko/20100101 Firefox/57.0

require 'selenium-webdriver'

options = Selenium::WebDriver::Chrome::Options.new(
  args: [
    "user-agent=#{ENV['AGENT']}"
  ],
  binary: ENV['GOOGLE_CHROME_SHIM']
)
driver = Selenium::WebDriver.for(:chrome, options: options)
driver.get('https://google.com')
puts driver.execute_script('return navigator.userAgent') # => Mozilla/5.0
$ heroku run bin/test
Running bin/test on ⬢ testapp... up, run.9802 (Free)
Mozilla/5.0

workaround is to use custom script that quotes $@

$ cat bin/chrome
#!/usr/bin/env bash
exec $HOME/.apt/opt/google/chrome/chrome --headless --no-sandbox --disable-gpu --remote-debugging-port=9222 "$@"

Tab crash on heroku only

enter image description here

I'd like to test multiple mobile user agents with selenium and chrome. I'm using python 3.6 and trying to deploy to heroku. I'm using headless chrome=68.0.3440.75 chromedriver 2.40.565383 . Based on http://chromedriver.chromium.org/mobile-emulation :

def create_chromedriver(ua=False):
    options = webdriver.ChromeOptions()
    CHROMEDRIVER_PATH = os.getenv('$HOME') or basedir+'/chromedriver.exe'
    FLASK_CONFIG = os.getenv('FLASK_CONFIG')



    if FLASK_CONFIG and FLASK_CONFIG == "production":
        # CHROMEDRIVER_PATH = '/app/.chromedriver/bin/chromedriver'
        CHROMEDRIVER_PATH = '/app/.chromedriver/bin/chromedriver'
        GOOGLE_CHROME_SHIM = os.getenv('$GOOGLE_CHROME_SHIM') or 'no path found'

        print(GOOGLE_CHROME_SHIM)
        print(GOOGLE_CHROME_SHIM)
        options.add_argument("--headless")
        options.add_argument("--disable-gpu")

    if ua:
        print('ua block33')

        mobile_emulation =  {"deviceName": "iPad Mini"}
        options.add_experimental_option("mobileEmulation", mobile_emulation)

    return webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, chrome_options=options)



def some_long_calculation():
    driver = create_chromedriver('test')
    # driver = create_chromedriver()
    print(driver.capabilities['version'])
    print(driver.capabilities['version'])

    driver.get("https://www.yahoo.com/")
  

    print(1)

    png = driver.get_screenshot_as_png()
    driver.close()

    # return 'a'
    return png

On both windows locally and if I run on heroku with When I run this project on heroku using

def some_long_calculation():
    # driver = create_chromedriver('test')
    driver = create_chromedriver()

I get the expected yahoo screenshot

However using :

def some_long_calculation():
    driver = create_chromedriver('test')

results in:

2018-07-26T15:08:21.448393+00:00 heroku[web.1]: State changed from starting to up
2018-07-26T15:08:23.555153+00:00 app[web.1]: no path found
2018-07-26T15:08:23.555197+00:00 app[web.1]: no path found
2018-07-26T15:08:23.555199+00:00 app[web.1]: ua block33
2018-07-26T15:08:25.772281+00:00 heroku[router]: at=info method=GET path="/" host=mobiletest16.herokuapp.com request_id=4f72f6b0-3d8f-418f-a01b-a0281c4f644d fwd="54.86.59.209" dyno=web.1 connect=0ms service=2219ms status=500 bytes=456 protocol=https
2018-07-26T15:08:25.770879+00:00 app[web.1]: [2018-07-26 15:08:25,756] ERROR in app: Exception on / [GET]
2018-07-26T15:08:25.770892+00:00 app[web.1]: Traceback (most recent call last):
2018-07-26T15:08:25.770894+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
2018-07-26T15:08:25.770895+00:00 app[web.1]:     response = self.full_dispatch_request()
2018-07-26T15:08:25.770897+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
2018-07-26T15:08:25.770899+00:00 app[web.1]:     rv = self.handle_user_exception(e)
2018-07-26T15:08:25.770900+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
2018-07-26T15:08:25.770902+00:00 app[web.1]:     reraise(exc_type, exc_value, tb)
2018-07-26T15:08:25.770904+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
2018-07-26T15:08:25.770907+00:00 app[web.1]:     raise value
2018-07-26T15:08:25.770908+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
2018-07-26T15:08:25.770910+00:00 app[web.1]:     rv = self.dispatch_request()
2018-07-26T15:08:25.770911+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
2018-07-26T15:08:25.770913+00:00 app[web.1]:     return self.view_functions[rule.endpoint](**req.view_args)
2018-07-26T15:08:25.770914+00:00 app[web.1]:   File "/app/err_test.py", line 115, in sanity_check
2018-07-26T15:08:25.770916+00:00 app[web.1]:     png = some_long_calculation()
2018-07-26T15:08:25.770918+00:00 app[web.1]:   File "/app/err_test.py", line 89, in some_long_calculation
2018-07-26T15:08:25.770919+00:00 app[web.1]:     driver = create_chromedriver('test')
2018-07-26T15:08:25.770921+00:00 app[web.1]:   File "/app/err_test.py", line 78, in create_chromedriver
2018-07-26T15:08:25.770923+00:00 app[web.1]:     return webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)
2018-07-26T15:08:25.770925+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 75, in __init__
2018-07-26T15:08:25.770926+00:00 app[web.1]:     desired_capabilities=desired_capabilities)
2018-07-26T15:08:25.770928+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 156, in __init__
2018-07-26T15:08:25.770929+00:00 app[web.1]:     self.start_session(capabilities, browser_profile)
2018-07-26T15:08:25.770931+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 251, in start_session
2018-07-26T15:08:25.770933+00:00 app[web.1]:     response = self.execute(Command.NEW_SESSION, parameters)
2018-07-26T15:08:25.770934+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 320, in execute
2018-07-26T15:08:25.770936+00:00 app[web.1]:     self.error_handler.check_response(response)
2018-07-26T15:08:25.770937+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
2018-07-26T15:08:25.770939+00:00 app[web.1]:     raise exception_class(message, screen, stacktrace)
2018-07-26T15:08:25.770944+00:00 app[web.1]: selenium.common.exceptions.SessionNotCreatedException: Message: session not created exception
2018-07-26T15:08:25.770946+00:00 app[web.1]: from tab crashed
2018-07-26T15:08:25.770948+00:00 app[web.1]:   (Session info: headless chrome=68.0.3440.75)
2018-07-26T15:08:25.770949+00:00 app[web.1]:   (Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.4.0-1019-aws x86_64)
2018-07-26T15:08:25.771063+00:00 app[web.1]: 
2018-07-26T15:08:25.773980+00:00 app[web.1]: 10.30.235.45 - - [26/Jul/2018:15:08:25 +0000] "GET / HTTP/1.1" 500 291 "https://dashboard.heroku.com/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"

How can I get this working?

You can download my project for both windows and heroku use at:

https://github.com/kc1/mobiletest

(keep in mind that if you deploy to heroku you have to set FLASK_CONFIG to production. Also you will need to add the 3 buildpacks shown in the screenshot.)

Failures due to "This version of ChromeDriver only supports Chrome version 81"

Cross posting here too because since today I have failures on my Java Heroku app saying:

This version of ChromeDriver only supports Chrome version 81

Posted an issue also on heroku-buildpack-chromedriver, but because I can see that you updated this buildpack yesterday I think this issue could be related to the last update.

I cannot apply any workaround. Even forcing a version doesn't fix the error.
Can you help me?

Headless Chrome blowing up on Heroku-16 and Cedar-14

I'm running an app on a heroku-16 stack with the heroku/heroku-buildpack-google-chrome buildpack, and it appears to barf with:

remote:        Running: rake assets:precompile
remote:        I, [2018-01-30T03:22:12.590734 #1041]  INFO -- : Writing /tmp/build_ec40d31506f51774e1843471db4e3a6e/public/assets/application-0fdddf6eb42efbc276a22bacd4ef1e878aa7a2f431a9558eabe4c3da0dad2034.js
remote:        I, [2018-01-30T03:22:12.591212 #1041]  INFO -- : Writing /tmp/build_ec40d31506f51774e1843471db4e3a6e/public/assets/application-0fdddf6eb42efbc276a22bacd4ef1e878aa7a2f431a9558eabe4c3da0dad2034.js.gz
remote:        (node:1058) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Failed to launch chrome!
remote:        /tmp/build_ec40d31506f51774e1843471db4e3a6e/vendor/bundle/ruby/2.5.0/gems/critical-path-css-rails-2.3.0/node_modules/puppeteer/.local-chromium/linux-508693/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory
remote:        TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
remote:        (node:1058) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
remote:        rake aborted!
remote:        Failed to get CSS for route /

Looks like heroku isn't getting the libX11 package?

I then ran heroku stack:set cedar-14, and during deploy it confirmed the change with Purging Cache. Changing stack from heroku-16 to cedar-14

It then failed with a similar message,

remote:        (node:4108) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Failed to launch chrome!
remote:        /tmp/build_c6db510c3ff20c9ea9b46e51c6122b51/vendor/bundle/ruby/2.5.0/gems/critical-path-css-rails-2.3.0/node_modules/puppeteer/.local-chromium/linux-508693/chrome-linux/chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

This time looking for libXss

How to find a browser's command_executor string in Heroku

I've run into the following problem while attempting to emulate a mobile browser with chrome on heroku: https://stackoverflow.com/questions/51349410/selenium-err-name-not-resolved-on-heroku-with-mobile-testing. Based on Josh Lewis's answer, and the python code sample at https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation

from selenium import webdriver
mobile_emulation = { "deviceName": "Nexus 5" }
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                  desired_capabilities = chrome_options.to_capabilities())

It may be that I need to use a command_executor (defined at https://seleniumhq.github.io/selenium/docs/api/py/webdriver_remote/selenium.webdriver.remote.webdriver.html) as

command_executor - Either a string representing URL of the remote server or a 
custom
remote_connection.RemoteConnection object. Defaults to 
‘http://127.0.0.1:4444/wd/hub'

to get my code working. How would I found this with the Heroku chrome buildpack, https://github.com/heroku/heroku-buildpack-google-chrome

Chrome failed to start: crashed

Excited to see this supported on Heroku! Running with Ruby only (no Rails), exits straight away upon starting. Happy to work with you to help debug, just let me know! 😄

Stack Trace

[SeleniumRummer] Chrome options => {:chromeOptions=>{:args=>["--ignore-certificate-errors"], :binary=>"/app/.apt/opt/google/chrome/chrome"}}
[SeleniumRunner] Starting driver
rake aborted!
Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: crashed
  (Driver info: chromedriver=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5),platform=Linux 3.13.0-112-generic x86_64)
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:678:in `raw_execute'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:110:in `create_session'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/bridge.rb:73:in `initialize'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/chrome/bridge.rb:52:in `initialize'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/common/driver.rb:61:in `new'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/common/driver.rb:61:in `for'
/app/vendor/bundle/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver.rb:88:in `for'...

Buildpacks

1. https://github.com/heroku/heroku-buildpack-chromedriver
2. https://github.com/heroku/heroku-buildpack-google-chrome
3. heroku/ruby

Thai letters render not working

Im trying to render a PDF using puppeteer where the template has Thai letters, but the result is something like this:
image

Can somebody help me with this issue, please, I would really appreciate it.

Karma-chrome-launcher failed to launch chrome Headless

Hi, I am trying to run tests for my application on Chrome Headless on Jenkins. To achieve this I am using https://github.com/heroku/heroku-buildpack-google-chrome/ buildpack but after using this buildpack karma-chrome-launcher failed to even respond back which earlier was failing to start chrome headless.

I am adding the screenshot of the console -
with https://github.com/heroku/heroku-buildpack-google-chrome/ buildpack
buildpack issue

without https://github.com/heroku/heroku-buildpack-google-chrome/ buildpack
buildpack issue--2

I am using puppetee for launching chrome headless ..Following is the karma configuration snippet-

var puppetteer = require('puppeteer');

process.env.CHROME_BIN = puppetteer.executablePath();
configuration.plugins.push(require('karma-chrome-launcher'));

configuration.browsers = ['ChromeHeadlessNoSandbox'];
configuration.customLaunchers = {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: ['--no-sandbox'],
},
};

Chrome binary not detected

I am getting the following problem in my heroku app:

2017-08-01 20:54:22 ac744713-8102-4c83-81fc-b4be4786b925 selenium.webdriver.remote.remote_connection[4] DEBUG Finished Request
Traceback (most recent call last):
  File "manage.py", line 89, in <module>
    manager.run()
  File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/__init__.py", line 412, in run
    result = self.handle(sys.argv[0], sys.argv[1:])
  File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/__init__.py", line 383, in handle
    res = handle(*args, **config)
  File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/commands.py", line 216, in __call__
    return self.run(*args, **kwargs)
  File "manage.py", line 83, in cron
    d.main()
  File "/app/blackbird/domain/cron.py", line 58, in main
    self.take_screenshots()
  File "/app/blackbird/domain/cron.py", line 208, in take_screenshots
    self.driver = webdriver.Chrome('chromedriver')
  File "/app/.heroku/python/lib/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 69, in __init__
    desired_capabilities=desired_capabilities)
  File "/app/.heroku/python/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 98, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/app/.heroku/python/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 188, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/app/.heroku/python/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "/app/.heroku/python/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
  (Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Linux 3.13.0-123-generic x86_64)

even though I have added the chrome driver and the google-chrome buildpacks:

enter image description here

Is there a step that I am missing to make my chrome binary available to my app?

GOOGLE_CHROME_SHIM has incorrect value

For me the GOOGLE_CHROME_SHIM environment variable is getting set to a value like:

/tmp/build_de6fa5a6488b4261bbdc4e5554cfade5/MyApp-11eaebf16d3943fcaf65af826a86856b6d3943fc/.apt/usr/bin/google-chrome-stable

instead of:

/app/.apt/usr/bin/google-chrome-stable

GOOGLE_CHROME_BIN is set correctly though. Here are both:

~ $ printenv | grep CHROME
GOOGLE_CHROME_BIN=/app/.apt/opt/google/chrome/chrome
GOOGLE_CHROME_SHIM=/tmp/build_de6fa5a6488b4261bbdc4e5554cfade5/MyApp-11eaebf16d3943fcaf65af826a86856b6d3943fc/.apt/usr/bin/google-chrome-stable

I have the following build packs installed:

https://github.com/emk/heroku-buildpack-rust
https://github.com/heroku/heroku-buildpack-google-chrome
https://github.com/heroku/heroku-buildpack-chromedriver
https://github.com/HashNuke/heroku-buildpack-elixir

Noticed a similar issue here: heroku/heroku-buildpack-xvfb-google-chrome#5

Explicitly set Version to ensure Deployment Repeatability

The way I understand it the current approach to tracking GOOGLE_CHROME_CHANNEL fails to guarantee repeatability in deployments and violates the 12 Factor App approach. If Google updates the stable version then the same code deployed to the same heroku environment at a later time could break purely due to the time-based dependency. As far as I can tell the previous configuration would not be recoverable with a rollback either.


Example:

Headless rendering via this build pack was working fine for us on Cedar-14, then on a subsequent deploy it was broken.

Chromedriver would fall over with the following error:

Selenium::WebDriver::Error::UnknownError: unknown error: DevToolsActivePort file doesn't exist

I tried running chrome from the command line, but it also failed as follows.

~ $ /app/.apt/usr/bin/google-chrome-stable
/app/.apt/opt/google/chrome/chrome: /lib/x86_64-linux-gnu/libdbus-1.so.3: no version information available (required by /app/.apt/usr/lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0)
/app/.apt/opt/google/chrome/chrome: /lib/x86_64-linux-gnu/libdbus-1.so.3: no version information available (required by /app/.apt/usr/lib/x86_64-linux-gnu/libatspi.so.0)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirclient.so.9)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirclient.so.9)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirclient.so.9)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircommon.so.7)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircommon.so.7)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircommon.so.7)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirprotobuf.so.3)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirprotobuf.so.3)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircore.so.1)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircore.so.1)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.9)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0)

On a whim I decided to upgrade our dated stack Cedar-14 to Heroku-16 and everything seemed to work again. I'm assuming a new version of chrome stopped working on Cedar-14.

I don't see how I could possibly go back to the previous working version of our application with the way this buildpack currently handles version configuration.

Simply exiting....

Hi there!

Im running this on Heroku and the process simply exits. I've also read that --headless simply wont work until 59. :(

I believe its just segfaulting

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.