Googlecolab を使って iRuby で selenium と chromium で徘徊する為に

#Googlecolab を iRuby カーネル ... Ruby 2.5.1 で動作させて Selenium を使うための設定。
**Settings for running iRuby kernel "Ruby 2.5.1" on Googlecolab and using Selenium.**

python についての設定ハウツーはたくさん見つかるが、ruby ではなかったので､まず python で使えるとこまでやってみて、そのあとに ruby に当てはめてとやっていると、python では素直に colab のシステムにある chrome なのか chromium なのかに chromedriver がたどり着くのに、つまり別途ブラウザのインストールなしに、設定（たぶん`pip install selenium`でブラウザの path がとおってるってことかな？うまくいくので調べていない。#しらべた。しらべてみてね）できるのに iRuby カーネルだと同様にやってもうまくはいかずにてこずった。

ようやくできたので､ 書き残しておきたい。

でもちょっとながくなりそう。
python と Ruby の場合で両方並べたい。

梅雨の雨のまにまに散歩してからと思ったが、

##googlecolab で python3 のカーネルで selenium を使う場合
ノーマル。googlecolab にアクセスすると python3 のカーネルがデフォルトなので、今のとこは。

```python:setting
!apt-get update
!apt install chromium-chromedriver
!ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/chromedriver

!pip install selenium

from selenium import webdriver

#webdriver の設定
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=' + 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3239.84 Chrome/73.0.3239.84 Safari/537.36')
driver = webdriver.Chrome('chromedriver',options=options)
driver.implicitly_wait(5)

```

ここまでが設定で、ここからがテスト。

```python
address = 'https://www.ugtop.com/spill.shtml
```

```python
driver.get(address)
w = driver.execute_script('return document.body.scrollWidth')
h = driver.execute_script('return document.body.scrollHeight')
driver.set_window_size(w, h)
current = driver.current_url

print(current)

driver.save_screenshot('screenshot.png')
#driver.close
#driver.quit()
```

アドレスってたぶんいつもつづり間違うのだけどこれでよかったかな。
アドレスの URL に見えないブラウザ（ GUI の chromium ブラウザは現れない。**'--headless'** ）が web ページを開いて（見えない）、（見える）スクリーンショットを撮ってくるというテスト。

見えないブラウザが web ページにアクセスした証拠のスクリーンショットの PNG 画像の確認のためには、画像ファイルをダウンロードしてもいいけど、何回もやっているとめんどくさくなってくるので、PNG 画像を確認するだけなら

```python:Image
from IPython.display import Image,display_png
display_png(Image('screenshot.png')
```

これで出力を確認。

ついでに、

```bash
!which chromedriver
```

で　chromedriver どこだったっけ？というのを教えてくれるが、たぶん、答えてくれる内容は、シンボリックリンクのところを指している。
それは、設定の一番最初の方で、

```bash:symbolic_link
!ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/chromedriver
```

と指定していたから。さらに確かめるには、`ldd /usr/bin/chromedriver`とかやればいいかもしれない。

シンボリックリンクを解除するには

```bash:unlink
!unlink /usr/bin/chromedriver
```

元のシンボリックリンクが参照する`/usr/lib/chromium-browser/chromedriver`の方を`unlink`すると実体ファイル`chromedriver`が消えてしまうと思う。`unlink`で指定するモノを間違わない方がいい。`/usr/lib/chromium-browser/chromedriver`の`chromedriver`が実体のプログラムで、シンボリックリンクが`/usr/bin/chromedriver`であることに注意する。
つまり`/usr/bin/chromedriver`へコマンドが送られると、`/usr/lib/chromium-browser/chromedriver`を参照する。
シンボリックリンクって何、こわい・・・と感じるならば、シンボリックリンク使わずに、実体を`/usr/bin/`ディレクトリの下にコピーするのかな。

```bash:copy
!cp /usr/lib/chromium-browser/chromedriver /usr/bin/
```

このようにコピーでもいいんじゃないでしょうか。

以上で、python の場合で selenium のインストールと動作確認までの一連。

---

##[iRuby] まず、 colab で iRuby を使えるようにするまで

については、こちらの記事に丁寧に説明されていることを参照。

**「Google ColabでRubyを使う」@ngotogenome**さん。

https://qiita.com/ngotogenome/items/d95a7a66c63e26b23de7

この記事通りのことをやってみて、使えるようになるのか十分確認してみてからやった方がいい。こういうことするんだなということが、動きや流れでわかっていた方が、ストレスが無い。ストレスない方が良い、良い。梅雨なので。

充分わかっていたら、端折れるところもあるので 2 回、3 回読んで流れを理解したら、**「ありがと」**と実際に声に出してみると、ストレスがふんわり軽減していくかもしれない。


##iRuby で selenium と chromium のセットアップからテストまで

* 必要なのは、github gist
 
###ruby_selenium_setting.ipynb
[![Open in Colab](https://camo.githubusercontent.com/52feade06f2fecbf006889a904d221e6a730c194/68747470733a2f2f636f6c61622e72657365617263682e676f6f676c652e636f6d2f6173736574732f636f6c61622d62616467652e737667)](https://colab.research.google.com/gist/dauuricus/80909d783fdaea619ddb50a067a0c988/ruby_selenium_setting.ipynb) 
上の **[ Open in Colab ] gist リンク**から googlecolab を開くと、誰かの(とは私) ノートだけど自分の googlecolab アカウントで見れているという状態になる。ちぎって自分のとこに保存しないと、自動的には保存されない。

**「  python selenium installing & setting 」**のところは、前の節で iRuby カーネルの場合との比較のために解説したものと思ってもらいたい。

**where?chrome** 以降がここから説明すること。

```bash
!which chromium-browser
```

を実行しても応答は無言 ... というところからスタートする。つまり chromium-browser インストールされてませんよね、という確認。されていない、無言だから ... きっと。


実行する前に [**ruby_selenium_setting.ipynb**](https://qiita.com/dauuricus/items/0717c8a08aba7abc7575#%E5%8F%82%E8%80%83%E3%81%BE%E3%81%A7%E3%81%AB%E3%81%93%E3%81%93%E3%81%A7%E4%BD%BF%E3%81%A3%E3%81%9F-ipynb-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%8E%B2%E8%BC%89) のなかの内容を確認しておかしな点がないと思ってから、**コピーして**、それから自分の GitHub アカウントの **gist** に保存( GitHub ではなく、です)してから、gist 上の googlecolab 向けの ipynb ファイルから読み込んで、そこから実行していくのが最初はオススメ。
こうすると、実行しても**上書きで gist に保存するまでは**プレイグラウンドと同じように、状態は保存されない。つまり、googlecolab 開いているブラウザでほかのページに移って戻ってくると、ページが再読み込みされた場合には、なかったことになって実行前の状態になっていて最初からやり直しということになるかもしれない。対して、 googlecolab の [ ドライブに保存 ] されている場合には、時間経過とともに最終編集ポイントで自動保存されているから、状態としてはページを読み込みした場合でも、継続されているという違いがある。
これが最初は都合がいい。全体の流れを把握してないうちは、最初に戻れる方が、繰り返して確認できるということだ。
不便を感じるかもしれないが、やってみたうえでは、これが便利だった。最短コース。
ここでは、gist にあるものを読み込んでるから、ページを閉じると、それ以前にどれかのセルを実行していたとしても状態は継続されずに gist に保存されているプリミティブに戻るということを意識しておこう。ちょっとややこしいけどね。

なぜそれが便利なのかというと、ここではこれから googlecolab で使うカーネル（ googlecolab ではランタイムと表現されている）を **python 3** から **iRuby 2.5.1** にスイッチする、ということをするのだけど、これが一方向で、後戻りできないの。
いや、できるけど。
Python 3 のカーネルがデフォルトで、これはなにも意識してなくとも python 3 のカーネルが標準で選ばれていて、これを 1. python 3　→　2. iRuby 2.5.1　→ 3. python 3 と切り替えると、次に iRuby に戻れなくなってしまうというわけ。2. から 3. には行けるが、3. から 2. には戻れないから、1. の状態にはすぐ戻れるようにしておこうという話だ。(ややこしいが"ランタイムを出荷時の設定に戻す"というので python3 カーネルに戻せて、そのあとで 2.iRuby にも推移できる場合もあるので、それでも同じではあると思う。しかし、戻れない場合もあったかもしれない。どういうときにそうなるのか、今は不明。ずうっとやっててファイルバージョンも自分で切り分けていると、どのノートがどういうことしたものだったのかを、翌日とか、時間が経つと colab だけでは、ファイル名を見てもすごく分かりにくいので、 gist にアーカイブしていくのが後から見やすいとおもう。ここでの方法はプレイグラウンドの状態と同じと思うが、colab の扱いに慣れたらいいが、やはり自動保存と枝分かれしていくトライアンドエラーを後からとらえ直すにはプロジェクトファイルを開く為のインターフェイスが貧弱で、たくさんファイル開いて比較してコードを確認していかないと目的の継続したいノートが見つけにくいので、やり方を決めたらずっと同じルールでこなしていく方が迷わないはずだ。特に複数のデバイスで寝転びながら同時に平行してやってると保存されたのか失敗したのか、どれがどの状態か自分で調べるしかないので、あらかじめ全部 gist 、gist 上に保存されてないのはもう探さないとか決めた方がはかどる。 )

戻りたくなるんです、最初は。なぜなら iRuby カーネルの状態ではセルで `!` とか `%%` などのマジックコマンドで ubuntu の bash にコマンドを出せないようになる。
出せるんだけど。

iRuby の状態で「あ、ここで apt install したいっ」ってことが出てくるんだけど、その為に python 3 カーネルに戻して、コマンドだして結果を確認して、もう一度 ipynb ファイルをダウンロードしてきて、書き換えてアップロードしてということをするか、ランタイムを完全に初期化して最初からやり直すかということになるのだけど、完全に初期化しても意図している意味では初期化されなくて iRuby カーネルが選べなくなっている場合もあるので、プリミティブにいつでも 1. python 3 の状態に戻れるというやり方でトライアンドトライするのがいい場合がある。1. の状態で `apt` コマンドを使って書き足した上で、2. iRuby へ推移して最後まで期待通りのことができたらその時点で gist へ上書きしたら、次回はその編集ポイントがプリミティブで起点になるから、そこから先に進むか、 [ コピーをドライブに保存 ] などするということを考えてほしい。ここでは、そのようなことを前提にしている。

###iRuby kernell set up

####1. まず、いちばんさいしょの確認箇所は、ブラウザ上では、[ランタイム] -- [ランタイムの変更] 。先に注意してほしいのは、このステップでは**変更しない**ということ。**保存ボタンも押さない**。ランタイムに「ruby 2.5.1」が表示されているかどうかを確認するだけ。

![colab.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/eef79720-d30a-14b0-a74c-4ce574c29db1.jpeg)

「ruby 2.5.1」が表示されている場合は、OKです。そのまま **[ キャンセル ]** ボタンを押してください。**[ キャンセル ]** の方です。[ 保存 ] はぜったいに押さない。[ 保存 ] ボタン押したら負け。負けたら[最初からやり直し](https://qiita.com/dauuricus/items/0717c8a08aba7abc7575#ruby_selenium_settingipynb)。

* 「ruby 2.5.1」が表示されていない場は、以降のステップではカーネルを変更できません。つまり googlecolab 上で Ruby が使えるようにできないということです。この場合は,今開いているノートを自分のアカウントの googlecolab に保存して（ [ファイル] -- [ドライブにコピーを保存] ）、gist へ保存して（ [ファイル] -- [コピーを GitHub Gist として保存] ）、ブラウザの別のタブで gist へログインして、ファイル内容を一部書き換える必要があります。

書き換え箇所は、`"kernelspec":`の `{}`の中です。

```
    "kernelspec": {
      "name": "ruby",
      "display_name": "ruby 2.5.1"
    },
```

２箇所だけですが、"name": **"ruby"** と "display_name": **"ruby 2.5.1"** となるように書き換えます。　

![colab1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/47f2d15c-1286-8567-9ac6-71b72e7dc359.jpeg)

書き換えが済めば、gist を保存して、

![Open in Colab](https://camo.githubusercontent.com/52feade06f2fecbf006889a904d221e6a730c194/68747470733a2f2f636f6c61622e72657365617263682e676f6f676c652e636f6d2f6173736574732f636f6c61622d62616467652e737667)　<< 現れたこの画像をクリックして、保存した gist から googlecolab を開きます。こうすると、自分の gist に保存された ipynb ファイルが googlecolab でファイルとしてオープンされた状態になります。再び [ランタイム] -- [ランタイムの変更] を確認してください。

####2. iRuby のセットアップ準備

現在のカーネルは python3 です。

```bash
!apt-get update
!apt install libtool libffi-dev ruby-full make
!apt install libzmq3-dev libczmq-dev

!gem install ffi-rzmq
!gem install rake
!gem install specific_install
!gem specific_install https://github.com/SciRuby/iruby
!iruby register --force
```

この最初のセルを実行（ shift + enter ）すると、

```
ランタイム「ruby」は認識されていません。デフォルトの「python3」に接続します ノートブックの設定
```

と表示されていたら、OK。
googlecolab デフォルトのカーネルで実行されるので、`!apt` コマンドや、その後の `!gem` コマンドが通るはずです。ランタイムが「ruby」だと、カーネルが iRuby の状態なので同じコマンドでエラーになります。エラーがでる場合は、**1．のステップ**をもう一度確認してください。この時点では、ランタイム**「python3」**で googlecolab のデフォルトのカーネルであることが前提です。

次がとても重要。

####chromium ブラウザーをインストール 

ここが重要。

```bash
!apt install chromium-browser
```

なぜ重要かというと、これで確実に iRuby の カーネル上で selenium を使う時に path が通るから。
別の方法でバイナリをダウンロードしてきて設置した場合にはブラウザへの path 設定が必要になるのと、さらに適合するバージョンのブラウザなのかどうかなど、不明なので、エラーに対して切りわけていく情報が無い。
そして、python の場合は、ブラウザーのインストールは省いても問題がないことと比較して、別途ブラウザーをインストールするこのステップは差異がある。

####chromedriver をインストール

```bash
!apt install chromium-chromedriver
```

ブラウザ自体は前ステップで別途インストールしたので、ドライバーをインストール。`!apt install` なのでシンボリックリンクは自前で作らなくてもいい。

####selenium-webdriver をインストール

```bash
!gem install selenium-webdriver
```

ここでは、python での場合と同じ。

これ以降は補助的、補足的なツールをインストールするか、しないか。
XML や HTML を parse して CSS やタグで要素にアクセスする用事があるのであれば、この段階（ iRuby のカーネルに切り替える前に）でそういった parse ツールをインストールする（方が良いと思う）。
後に説明するが、デフォルトの python3 カーネルではなく、 iRuby のカーネルに切り替えてから、システムコマンドを使うとすると、それはできなくもないが、インタープリターの応答がとても寡黙になる。
職人のおじいさんのように、「うむ（ true ）」／「いや（ false ）」のどちらかしか言ってくれなくなるので、それがさびしいとか、きびしいと感じるようであれば、今のうちにという意味で。

**mechanize**

```bash
!gem install mechanize
```

もしくは、**鋸**（のこぎり）

```bash
!gem install nokogiri
````

その他、必要に応じて Ruby で使うものなどを `gem` コマンドでインストール。必要なければ別にいいし、他に必要であれば、それを。

```bash
!gem install httparty
```

```bash
!gem install down
````

次のステップで、カーネルが iRuby に変更される。

### ランタイム → ランタイムのタイプを変更 → 保存

このステップによってカーネルが **python 3　→　iRuby 2.5.1** に変更される。

ブラウザ上で実際にする動作は、 [ ランタイム ] -- [ ランタイムの変更 ] -- [ 保存 ] 。こんどは、**保存**する。
![colab2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/2f939c88-83da-3fa6-6f3a-b35079dfcd55.jpeg)

###test

selenium-webdriver , chromium-chromedriver が Ruby コードで動くかのテスト。

最初の python での場合とほとんど同じ。よく似ています。
まず設定。

```ruby
require 'selenium-webdriver'

@wait_time = 3
@timeout = 4

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--no-sandbox')
#options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
#options.add_argument('--user-agent=' + 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3239.84 Chrome/73.0.3239.84 Safari/537.36')
driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.timeouts.implicit_wait = @timeout
wait = Selenium::WebDriver::Wait.new(timeout: @wait_time)
```

ターゲットのアドレス = 今見ている、このページ。

```ruby
address = 'https://qiita.com/dauuricus/items/0717c8a08aba7abc7575'
```

```
driver.get(address)
```

python の場合と同じ。 GUI の chromium ブラウザは現れない。**'--headless'**

```ruby
current = driver.current_url
puts current

w = driver.execute_script('return document.body.scrollWidth')
h = driver.execute_script('return document.body.scrollHeight')
driver.manage.window.resize_to(w, h)
driver.save_screenshot('screenshot.png')
```
Ruby の場合は、iRuby が最後のラインを評価するので、自動的に評価されたものがリアルブラウザを通して出力に現れる（これが不思議）。
なので、キャプチャした画像を確認するだけなら、他に何も実行する必要は無い。このような画像が実行したセルの下の出力に現れる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/40b36b9b-4de7-161a-de50-dd06eca8e52d.png" algin="left">　`execute_script`は、**javascript** を execute する selenium-webdriver のメソッドなので python の場合と全く同じになるようだ。ここでは、ターゲットのページの body の縦横サイズ値を返すスクリプトを実行している。
ここで重要なのは、**「 selenium は web ページの javascript 超えれそう」**ということ。どこまで対応してるのかわんないが。**chrome のデベロッパーツールのようなバイナリ読み込みのイベントをフックする**とこまではどうなんでしょう。

Rf.
https://developers.google.com/web/updates/2017/04/headless-chrome
https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

`driver.manage.window.resize_to(w, h)`が Ruby ぽいコード ?? の書き方にしてある感じ（あくまでも感じ、雰囲気）、python の場合だと、`driver.set_window_size(w, h)`だった・・・iRuby カーネルでは `set_window_size()`だとエラーになる・・・が、iRuby カーネルでは webdriver の Ruby 用に用意されているメソッドを使う。

webdriver は、最終的には`quit`しなければいけないと思う。
なので、いずれ・・・

```ruby
driver.quit
```

selenium は、いちおう「はじめてのひとへ」みたいなドキュメントがあるが、読んでも解らない書き方の部類で、わかってから読むと解ると思うが、全体の筋が見えない構成のマニュアルのように感じる（つまり読んでいないよ、まだ）。

Rf.
これのこと
https://www.selenium.dev/documentation/ja/getting_started/
( **http プロキシ**のとこだけを用事があって見たけど、サンプルコードが間違っている。`driver = Selenium::WebDriver.for(:chrome, desired_capabilities: cap)`じゃないと動かない。)

自分がここ数日、探したところでは、googlecolab で Ruby で selenium を使う方法については情報がゼロで、いろんな年代の **Ruby で selenium を使う方法（プラットフォームもいろいろだが googlecolab ではない）**についての情報を参考にすると、対処法のわからないエラーになり（ バイナリで[こういうとこ](https://chromedriver.storage.googleapis.com/index.html?path=91.0.4472.19/)から chromedriver をダウンロードしてきて path を通したうえでブラウザを自前でインストールしてない状態での'Selenium::WebDriver::Error::WebDriverError: unable to connect to chromeserver 127.0.0.1:9515' エラーなど）、その解決法はもちろん探してもレアなので見つからないので、必要要素を俯瞰するために参考にしつつ、実際にはしない方が良いと思う。信じてやると（違うと解るのに）一週間くらいはかかると思う（かかった）。

以上、この記事でやや最短の方法で、できるかできないかだが、ここで概要がつかめたら他にポイントを絞ってこまかく追及したらいいんじゃないかな？自分・・・と思っている。
おそらく、iRuby でのケースではブラウザの path が webdriver に正しく読み取れてないことがつまづいた原因で、調べてセットできれば chromium を新たにインストールする必要は無いんじゃないかと思う。だが、原因を調べずとも、`apt install chromium-browser`で root でインストールすると、そちらには他に何もしなくて path が webdriver が困らない程度に設定されるということを示している。

一通りやって、確かめられたならば、ちぎってコピー（ [ ドライブにコピーを保存 ]）して、作業すれば保存されていくので、変更していくことができる。 gist から読み込んで変更していく場合は、状態は保存されないので注意してほしい。

最後に、iRuby カーネルに切り替えてから、通常の googlecolab での`!`や`%%`などのマジックコマンドでシステムコマンドを通すようなことをするには、

```ruby:sytem_command_call
system("システムコマンド")
```

というのが使えた。`!`や`%%`は使えない（と思う、今の時点では）。
例を挙げておくと、以下のようになる。

```ruby:Examples
system("apt-get update")
system("apt install chromium-chromedriver")
system("ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/chromedriver")
system("gem install selenium-webdriver")
system("unlink /usr/bin/chromedriver")
system("chmod +x /usr/bin/chromedriver")
```

などなど。他に方法はあるかもしれぬ。だが、知らぬ。

###参考までに、ここで使った ipynb ファイルを掲載。

この json 形式の内容部分をコピーして、"`hongehogehoge.ipynb`"というファイル名をつけて **ipynb** 形式のファイルで、googlecolab にアップロードする方法をとってもいい。

>画像をクリックすると googlecolab のノートが開きます。
[![Open in Colab](https://camo.githubusercontent.com/52feade06f2fecbf006889a904d221e6a730c194/68747470733a2f2f636f6c61622e72657365617263682e676f6f676c652e636f6d2f6173736574732f636f6c61622d62616467652e737667)](https://colab.research.google.com/gist/dauuricus/80909d783fdaea619ddb50a067a0c988/ruby_selenium_setting.ipynb) << これと同じ内容。

**ruby_selenium_setting.ipynb**

```json:ruby_selenium_setting.ipynb
{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "ruby_selenium_setting.ipynb",
      "private_outputs": true,
      "provenance": [],
      "collapsed_sections": [
        "_mJ1vIGPyVZc",
        "0XqixqK47WyO",
        "Z2AK1Pvg6UIy",
        "AfuhFrMeA5iH"
      ],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "ruby",
      "display_name": "ruby 2.5.1"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/gist/dauuricus/80909d783fdaea619ddb50a067a0c988/ruby_selenium_setting.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZO8RwcZaH_F2"
      },
      "source": [
        "#python selenium installing & setting"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NTnxQXnI7Rvw"
      },
      "source": [
        "!apt-get update\n",
        "!apt install chromium-chromedriver\n",
        "!ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/chromedriver\n",
        "!pip install selenium\n",
        "\n",
        "from selenium import webdriver\n",
        "\n",
        "options = webdriver.ChromeOptions()\n",
        "options.add_argument('--headless')\n",
        "options.add_argument('--no-sandbox')\n",
        "options.add_argument('--disable-dev-shm-usage')\n",
        "options.add_argument('--user-agent=' + 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3239.84 Chrome/73.0.3239.84 Safari/537.36')\n",
        "driver = webdriver.Chrome('chromedriver',options=options)\n",
        "driver.implicitly_wait(5)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6jc9B7Me7phx"
      },
      "source": [
        "address = 'https://www.ugtop.com/spill.shtml'"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nAY-lm3e9WfR"
      },
      "source": [
        "driver.get(address)\n",
        "w = driver.execute_script('return document.body.scrollWidth')\n",
        "h = driver.execute_script('return document.body.scrollHeight')\n",
        "driver.set_window_size(w, h)\n",
        "current = driver.current_url\n",
        "print(current)\n",
        "\n",
        "driver.save_screenshot('screenshot.png')\n",
        "#driver.close\n",
        "#driver.quit()"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "y2YDAq2ZCX2F"
      },
      "source": [
        "from IPython.display import Image,display_png\n",
        "display_png(Image('screenshot.png'))"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "eSR9zKJ1FzJ0"
      },
      "source": [
        "!which chromedriver"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_mJ1vIGPyVZc"
      },
      "source": [
        "#where? chrome"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jjbTtP4LyNpg"
      },
      "source": [
        "!which chromium-browser"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "haSd3eC-7Wbi"
      },
      "source": [
        "#iRuby kernell set up"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "j8JoUbPYwIw-"
      },
      "source": [
        "!apt-get update\n",
        "!apt install libtool libffi-dev ruby-full make\n",
        "!apt install libzmq3-dev libczmq-dev\n",
        "\n",
        "!gem install ffi-rzmq\n",
        "!gem install specific_install\n",
        "!gem specific_install https://github.com/SciRuby/iruby\n",
        "!iruby register --force"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "U8soE8mzyKYs"
      },
      "source": [
        "###installing browser "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TMiySnM0gp19"
      },
      "source": [
        "!apt install chromium-browser"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7-ct2oi4x2QB"
      },
      "source": [
        "##installing chromedriver"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1u9fRAb_ir6H"
      },
      "source": [
        "!apt install chromium-chromedriver\n",
        "\n",
        "##!ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/chromedriver\n",
        "##!chmod +x /usr/bin/chromedriver"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-e3kqAQSGJSn"
      },
      "source": [
        "!gem install selenium-webdriver"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7nA0W7EU6sY9"
      },
      "source": [
        "鋸などの parse tool が必要であれば好みで"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ZOGQdQRPw1FZ"
      },
      "source": [
        "!gem install nokogiri"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "n77M5lCtUBmd"
      },
      "source": [
        "!gem install mechanize"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "0XqixqK47WyO"
      },
      "source": [
        "####HTTP request"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "iiCmVRbufao3"
      },
      "source": [
        "!gem install httparty"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5L_XSueAbcYL"
      },
      "source": [
        "!gem install down"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "h_sS6jEdwbMT"
      },
      "source": [
        "##ランタイム → ランタイムのタイプを変更 → 保存"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Z2AK1Pvg6UIy"
      },
      "source": [
        "#test"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "xw6a5qlrGSWw"
      },
      "source": [
        "require 'selenium-webdriver'\n",
        "\n",
        "@wait_time = 3\n",
        "@timeout = 4\n",
        "\n",
        "options = Selenium::WebDriver::Chrome::Options.new\n",
        "options.add_argument('--headless')\n",
        "options.add_argument('--no-sandbox')\n",
        "options.add_argument('--disable-gpu')\n",
        "options.add_argument('--disable-dev-shm-usage')\n",
        "driver = Selenium::WebDriver.for :chrome, options: options\n",
        "driver.manage.timeouts.implicit_wait = @timeout\n",
        "wait = Selenium::WebDriver::Wait.new(timeout: @wait_time)\n"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8NS7rzfHGo6c"
      },
      "source": [
        "address = 'https://qiita.com/dauuricus/items/0717c8a08aba7abc7575'\n"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NPfS3CU9lLOs"
      },
      "source": [
        "driver.get(address)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "zPrwR1dUlgm3"
      },
      "source": [
        "current = driver.current_url\n",
        "puts current\n",
        "\n",
        "w = driver.execute_script('return document.body.scrollWidth')\n",
        "h = driver.execute_script('return document.body.scrollHeight')\n",
        "driver.manage.window.resize_to(w, h)\n",
        "driver.save_screenshot('screenshot.png')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "AfuhFrMeA5iH"
      },
      "source": [
        "#iRuby カーネルからシステムコマンドの例"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "SSLha54FHG0Y"
      },
      "source": [
        "#system(\"apt-get update\")\n",
        "#system(\"apt install chromium-chromedriver\")\n",
        "#system(\"ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/chromedriver\")\n",
        "#system(\"gem install selenium-webdriver\")\n",
        "###system(\"unlink /usr/bin/chromedriver\")\n",
        "###system(\"chmod +x /usr/bin/chromedriver\")"
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}
```


selenium を使って screenshot した gist ページ。**「鋸などの parse tool が必要であれば好みで」** , **「ランタイム → ランタイムのタイプを変更 → 保存」** , **「iRuby カーネルからシステムコマンドの例」**の箇所に文字化けが確認されてブラウザに日本語のフォントが指定されていないことが解る。
![selenium を使って screenshot した gist ページ。 ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/8e77b338-d43f-c374-0095-a4d6bed1130e.png)

ブラウザ用に日本語フォントをインストールすれば、日本語の文字化けは解消される。

```ruby:nato-cjk-font-install
system("apt-get install -y fonts-noto-cjk")
```

ずうっとトライ、エラー＆エラーでざざ降り雨の日が続いた晴れ間に、気乗りせずさらにトライしてみたら 30 分でテスト成功にこぎ着けたので、ようやくスタートラインが見えたと、お散歩して身体のばしてから書こうと思ったのに、そのままずぅっと書き足して朝になった。昼だったのに。

散歩したい。