Rseleniumとは
Webアプリケーションのテストを自動化するツールの一つ。
がWebブラウザで操作する代わりに指定された挙動を実行し、
Web上のプログラムの動作検証を行う枠組みを提供する。
“selenium” とは原子番号34の元素、
セレン(元素記号はSe/日本語のセレンは独語由来)のこと。
→自動ログインや自動のクリックができる!!
webからデータを取ってくる(スクレイピング)時に使える
次ページから環境構築を早速していく!
Dockerというアプリをダウンロード
Windows
https://docs.docker.jp/docker-for-windows/install.html#install-docker-desktop-on-windows
Mac
http://docs.docker.jp/docker-for-mac/install.html#install-and-run-docker-desktop-on-mac
M1
https://rion778.hatenablog.com/entry/2021/03/14/174259
※インストール後にWSL2というアプリのダウンロードを求
められたらダウンロードする
Dockerを使ってseleniumサーバを引っ張ってきたりコンテナ
を介してサーバを停止させたり消したりする
https://www.youtube.com/watch?v=DNnW4I43wyU
Chrome driver のダウンロード
Chrome driver はweb driver の一種でこいつがネット上を徘徊して
データを送ってくれる感じ(?)
Chrome driver ダウンロード
ChromeDriver -WebDriver for Chrome - Downloads (chromium.org)
※自分のgoogle chrome と同じバージョンのchrome driver を選ぶ
(じゃないとうまく使えない!)
seleniumサーバを引っ張ってくる
→次のコマンドをターミナル上で実行
docker pull selenium/standalone-chrome
セレンサーバを自分の環境に引っ張ってくる(?)
docker run –d –shm-size=1024m –p 4444:4444 selenium/standalone-chrome
ホストポート4444とコンテナポート4444をつなげてセレンサーバをrun(実
行)させる
-p:つなげる(publish), -d:? , --shm-size=1024m:割り当てるメモリの大
きさ)
これでdockerのContainer/Appsに新しいコンテナができているはず
正しく実行できたかどうかを確認するための方法としてブラウザからweb
ページにアクセスしてみるとよい(次ページ)
ブラウザからセレンサーバが正しく構築できているのかを
確認する方法
ブラウザのURLを打つ欄に「localhost:4444」と打ち込む。
もしくは「自分のIPアドレス:4444」と打ち込む。
こんな画面が出たらok!
※注意※
dockerでの一連の操作はメモリを大量に使うので
使用中はメモリがかつかつになる。。。
ずっとdockerコンテナを走らせているとpcが重くなってしまうので
やりたいことが終わったらDockerのContents/Appsでコンテナを
ストップさせて削除しよう。
(消してもまた同じコマンドをすればすぐにまたコンテナが作れる
あとは自分の行きたいページに行ったり、ログインが必要な場合は
id・パスワードを入れる欄をDOM(DOMについては後で触れる)
ベースで指定してそこに自分のid・パスワードを入れてログインボタンを
クリックする関数を使えばいい
Rseleniumのメソッドの説明はよいwebページがあるのでそちらを参考に
するのもいいかも
https://qiita.com/nozma/items/2731b36db8129439a931
library(httr)
library(rvest)
library(RSelenium)
remDr <- remoteDriver(remoteServerAddr = “xxx.xxx.xxx.x”, ##自分のipアドレス
port = 4444,
browserName = "chrome")
Sys.sleep(5)
remDr$open()
コードを追いながら説明
remoteDriverがwebを徘徊してくれる(?)
・Sys.sleep(5)は5秒パソコンにじっとするように指示する関数
なぜこうするかというと一気にコードを実行すると相手のサーバに負荷がかかる
ため
・remDr$open()はサーバに接続しているらしい
remDr$navigate(“URL”)
Sys.sleep(5)
行きたいURLにremote driverが飛んでくれるメソッド
remDr$maxWindowSize()
remDr$screenshot(display=TRUE)
今いるサイトのスクリーンショットを取ってくれるメソッド
適宜使うことで自分がどんなサイトにいるのかがわかりコードが書きや
すくなる
webElem <- remDr$findElements(using="xpath",value ="/html/body/header/k2-
kite-header-tool-nav-provider/div/div/nav/k2-kite-header-account-
nav/a[2]/span")
DOMベースでサイト上の要素を指定することができるメソッドで、それ
を変数に入れることで指定した部分だけにメソッドが適用できるように
よく使うremDrメソッド
webElem <- remDr$findElement(~) ##引数書くと長くなるので省略
webElem$clickElement()
Sys.sleep(5)
findElementメソッドを使ってベースで指定した要素を
クリックするメソッド
ページを移動することになると思うのでSys.sleepで
ページの読み込み待機をする(多分なくてもいい)
webElem <- remDr$findElement(~) ##引数書くと長くなるので省略
webElem$sendKeysToElement(list(“xxxxxxx”))
またfindElementしたところに対してのメソッドで、
指定した要素を”xxxxxxx”で埋めてくれる(id・パスワード)
remDr$getCurrentUrl
いまいるサイトのURLを返してくれるメソッド
remDr$findElement()の詳しい使い方
1 ブラウザで対象のサイトを開いてF12キーを押す
Macはこのやり方で開発者ツールを開いて
https://applica.info/safari-developer-tool
(メモ)
開発者ツールで出てくるのはhtmlじゃなくてDOMというもので詳し
くは次のサイトを参照
https://www.codegrid.net/articles/2017-newer-dom-1/
2 開発者ツールの左上のポインタのマークのところをクリックし
てサイトの要素をクリックするとその部分のDOMが表示される
3 そのDOMを右クリックして「コピー」から「完全なXpathをコピー」
を選択してxpathをコピーする
4 webElem<-findElements(using = “xpath”,value = “xxxxx”)の”xxxxx”部分に
コピーしたxpathを入れてあげる
→これでDOMの一部を抜粋できた!!
クリックするなりパスワードを入力するなりウェブを抜き出すなりすれば
いいがウェブを抜き出すためにはDOMを処理する必要がある(次ページ)
XpathのほかにもDOMのidやcss形式、classを使った指定方法があるが
使いづらかったので使いたいひとは以下のサイトを参照
https://qiita.com/nakamichi/items/ad186633ae249b26d032
DOMから文章を抽出する
header_large <- unlist(remDr$getPageSource())
%>% read_html()
%>% html_nodes(xpath = "//span[@class = 'cmnc-large']")
%>% html_text()
%>% as.data.frame
getPageSource()メソッドでDOMを取得でき、それをhtml形式に変換し
その中でさらに文章を絞りたければhtml_nodes()を使うこともできる。
そして最後にhtml_text()にいれることでhtmlを人間語にしてくれる。
as.data.frameは見やすい形式にに変換するためにつけた。
Rでマネーフォワードをスクレイピングする - もうカツ丼はいいよな
(hatenablog.com)
わかりやすかった!
【知らなきゃ危ない!】webスクレイピング禁止サイトまとめ | 居酒屋
エンジニア (engineerismydream33.org)
スクレイピングで法を破らないように…
Dockerコマンド一覧 – Qiita
しらなくてもいいかな…
Pythonでスクレイピングのルール(robots.txt)をチェックするツールを作
る – Qiita
スクレイピングで法を破らないように…2(よくわからなかった)

Rselenium Dockerとの接続