Shellium:bash用の単純なセレンニウムウェブドライバ
セレンは多くの言語で使用できる
セレンは、我々が知っているように、自動ブラウザ操作のためのツールです.
セレンは、自動ブラウザ操作を実行するためにWebdriverを使用しています
php
, python
, and javascript
.例えば、あなたが使いたいなら
php
, 使えますfacebook-webdriver このように.// run chromedriver
$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
// open the URL
$driver->get('https://www.google.co.jp/');
For javascript
, 使えますselenium-webdriver これを行うには// run chromedriver
const capabilities = Capabilities.chrome()
const driver = await new Builder().withCapabilities(capabilities).build()
// open the URL
await driver.get('https://www.google.co.jp/')
これは、ほぼすべての言語で同様の方法で書かれているので、任意の言語でセレンを経験している場合は、簡単に他の言語でそれを書くことができる必要があります.はい、シェルスクリプトを除いて.
なぜbashやzshのウェブドライバがないのですか?
私が見る限り、シェルスクリプトのためのwebdriverがないので、シェルでセレンをためしたいならば、あなたは苦労します.
する必要があります
npm install
, composer install
, など環境を準備する.ブラウザの操作を自動化するのは簡単だと思いましたが、そうではありません.
シェルハッカーのためのセレン
したがって、これは簡単に自動ブラウザ操作を実行するshellscriptを使用したい人のためです.
以下に示すように、自動ブラウザ操作はシェルスクリプトだけで実現できます.必要なのはbashまたはzshです.
シェルで自動ブラウザ操作を実行する方法
自動ブラウザ操作の流れは次の通りです.あなたがしなければならないのは、cURLを持つブラウザ(ドライバ)にJSONを投稿することです.
0 .起動ドライバ
まず第一に、あなたが実行する必要があります
chromedriver
. あなたがいないならばchromedriver
, ジャストbrew install chromedriver
. または(公式ウェブサイトから直接ダウンロード).$ chromedriver
Starting ChromeDriver 2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363) on port 9515
Only local connections are allowed.
それからchromedriverはhttp://localhost:9515
.1 .ブラウザの起動とセッションIDの取得
シェルからブラウザを起動しましょう.
curl -X POST -H 'Content-Type: application/json' \
-d '{"desiredCapabilities": { "browserName": "chrome" }}' \
http://localhost:9515/session
それは簡単です.実行するとブラウザが起動します.将来、このブラウザにコマンドを送るためには、セッションを指定してコマンドを送信する必要がありますので、セッションIDを取得する必要があります.
The
sessionID
上記のcurlレスポンスでJSONとして返されるので、SessionIDをそこに展開します.私たちはshellscriptを使用しているので、それは使いやすくなりますjq
. もちろん、使用grep
も良いです.$ curl ... http://localhost:9515/session | jq -r '.sessionId'
# Get the sessionID
e1c3d895e7c7d42383c110e5e4cd7bbf
URL移行
curl -X POST -H 'Content-Type: application/json' \
-d '{"url":"https://google.co.jp"}' http://localhost:9515/session/${SESSION_ID}/url
あなたはGoogleのトップページにリダイレクトされます.The ${SESSION_ID}
あなたが先に得たものです.要素とキーボード入力の取得
さて、いくつかのセレンのようなことをしましょう.まず、我々は何かを行います
findElementByName()
name属性から要素を取得するにはcurl -X POST -H 'Content-Type: application/json' \
-d '{"using":"name", "value": "q"}' http://localhost:9515/session/${SESSION_ID}/element \
| jq -r '.value.ELEMENT'
あなたは、要素を得ることができます{"using": "property name", "value": "value"}
. グーグルの検索ボックスname="q"
, として指定することができます{"using": "name", "value": "q"}
.上記のカールを実行することで、検索ボックスの要素IDを得ることができます.
$ curl ... http://localhost:9515/session/${SESSION_ID}/element | jq -r '.value.ELEMENT'
# Get the element ID
0.5757440182130869-1
「要素ID」は、要素、キーボード入力、またはフォーカスをクリックするなどの要素を使用して任意のアクションを実行する必要があります.キーボード入力の場合は、次のようになります
curl -s -X POST -H 'Content-Type: application/json' \
-d '{"value": ["animal\n"]}' http://localhost:9515/session/${SESSION_ID}/element/${elementId}/value
注意する必要がある唯一のことは、配列形式で入力する文字列を渡すことです.また、追加することができます\n
最後には、それを入力として動作させる.セレンのような作品
上記の組み合わせを単一のシェルスクリプトに組み合わせると、完全なセレンがあります.
#!/usr/bin/env bash
main() {
# Open the URL
navigate_to 'https://google.co.jp'
# Get the search box
local searchBox=$(find_element 'name' 'q')
# keyboard input and searching
send_keys $searchBox "animal\n"
}
get_session_id() {
curl -s -X POST -H 'Content-Type: application/json' \
-d '{
"desiredCapabilities": {
"browserName": "chrome"
}
}' \
${ROOT}/session | jq -r '.sessionId'
}
ROOT=http://localhost:9515
SESSION_ID=$(get_session_id)
BASE_URL=${ROOT}/session/${SESSION_ID}
navigate_to() {
local url=$1
curl -s -X POST -H 'Content-Type: application/json' -d '{"url":"'${url}'"}' ${BASE_URL}/url
}
find_element() {
local property=$1
local value=$2
curl -s -X POST -H 'Content-Type: application/json' \
-d '{"using":"'$property'", "value": "'$value'"}' ${BASE_URL}/element | jq -r '.value.ELEMENT'
}
send_keys() {
local elementId=$1
local value=$2
curl -s -X POST -H 'Content-Type: application/json' \
-d '{"value": ["'$value'"]}' ${BASE_URL}/element/${elementId}/value >/dev/null
}
main
これは非常に簡単です:カールの部分を小さな機能にJSONをスローすることによって、ちょうど主な機能の内容を見るなら、それはすでに完全なWebdriver記述です.一緒に機能に入れられている部分は、セレンで一緒に置くことができます.SHなど、非常にシンプルな外観の下に示すように供給.
#!/usr/bin/env bash
source ./selenium.sh
main() {
# Open the URL
navigate_to 'https://google.co.jp'
# Get the search box
local searchBox=$(find_element 'name' 'q')
# keyboard input and searching
send_keys $searchBox "animal\n"
}
main
ボーナス:iterm🤝 セレン
それで、私は、シェルと一緒にitermとセレンを付けました.
itermで作業中に、ブラウザが自動的に舞台裏で動作します.
その他
リポジトリを作成しました
shellnium
, だからあまりにも見てください!https://github.com/Rasukarusan/shellnium
リファレンス
WebDriver
Reference
この問題について(Shellium:bash用の単純なセレンニウムウェブドライバ), 我々は、より多くの情報をここで見つけました https://dev.to/rasukarusan/shellnium-simple-selnium-webdriver-for-bash-1a9kテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol