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を投稿することです.
  • ブラウザ起動
  • URL移行
  • キーボード入力
  • それを感じるために1つずつ.

    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