$30 off During Our Annual Pro Sale. View Details »

Shell Scriptで6/1 OSC19do 大懇親会の会場を御案内します

Shell Scriptで6/1 OSC19do 大懇親会の会場を御案内します

Selenium WebDriverはShell Scriptでも使用可能です。HTTPieとjqを組み合わせて実装したので、その方法を説明し、デモとして題名通りの事をいたします。

東平洋史

May 05, 2019
Tweet

More Decks by 東平洋史

Other Decks in Technology

Transcript

  1. Shell Script
    6/1 OSC19do



    View Slide





  2. View Slide


  3. ?

    View Slide




  4. View Slide

  5. View Slide

  6. Shell Script

    View Slide



  7. !+),$ )&1.,!
    1.
    2. Web-0%'
    3. GoogleOSC19do $
    4. Connpass!/2($
    5. $&1*&
    6. $$&1*&
    7. #"
    8.

    View Slide



  8. • Bash
    – Linux, MacOS, Windows Subsystem for Linux
    (,FreeBSD, …)
    • Google Chrome
    • Google Chrome Driver
    https://sites.google.com/a/chromium.org/chromedriver/
    • HTTPie (cURL)
    https://github.com/jakubroztocil/httpie
    • jq (JSON
    sed)
    https://stedolan.github.io/jq/download/

    View Slide


  9. HTTP

    (JSON)
    HTTP
    (JSON)
    httpie

    Chrome
    Driver




    View Slide

  10. HTTPie: a CLI, cURL-like tool for humans
    • https://github.com/jakubroztocil/httpie
    HTTPie (pronounced aitch-tee-tee-pie) is a
    command line HTTP client. Its goal is to make
    CLI interaction with web services as human-
    friendly as possible. It provides a simple http
    command that allows for sending arbitrary
    HTTP requests using a simple and natural
    syntax, and displays colorized output. HTTPie
    can be used for testing, debugging, and
    generally interacting with HTTP servers.

    View Slide

  11. HTTPie
    http [flags] [METHOD] URL [ITEM [ITEM]]

    RESPONSE=¥
    $(echo ‘(JSON)’ | ¥
    http APIURL)
    API

    https://w3c.github.io/webdriver/webdriver-spec.html
    http

    View Slide

  12. Selenium WebDriverAPI ( )
    +#%( URI&0)/1' *0(
    POST /session "%!,0

    POST /session/{session id}/url URL

    GET /session/{session id}/title $'.
    POST /session/{session id}/element

    POST /session/{session id}
    /element/{element id}/sendKeys


    1
    POST /session/{session id}
    /element/{element id}/click


    -%
    https://w3c.github.io/webdriver/webdriver-spec.html

    View Slide

  13. (Chrome Driver )
    pkill chromedriver
    chromedriver &

    View Slide

  14. Google Chrome
    RESPONSE=$(http POST localhost:9515/session ¥
    desiredCapabilities:='{}’ ¥
    requiredCapabilities:='{}')
    #
    ID
    SESSION_ID=$(echo ${RESPONSE} | jq -r .sessionId)

    View Slide

  15. http

    {
    "sessionId": "8dc5eab177a254e8f36b4eceb8b2f427",
    "status": 0,
    ()
    }

    View Slide

  16. Google
    http POST ¥
    localhost:9515/session/${SESSION_ID}/url ¥
    url= http://www.google.co.jp/

    View Slide

  17. Google

    RESPONSE=$(http POST ¥
    localhost:9515/session/${SESSION_ID}/element ¥
    using=name value=q)
    # ELEMENT_ID ID

    ELEMENT_ID=$(echo ${RESPONSE} | ¥
    jq .value | jq -r .ELEMENT)

    View Slide

  18. http
    {
    "state": "success",
    “sessionId”:
    "da990f64-671f-4b4e-b4f9-af3363fb54e8",
    "hCode": 1209818291,
    "value": {
    "ELEMENT": "0"
    },
    "class": "org.openqa.selenium.remote.Response",
    "status": 0
    }

    success
    ID

    View Slide

  19. OSC19do

    echo “{¥“value¥”:[¥“OSC19do
    ¥n¥"]}” | ¥
    http POST localhost:9515
    /session/${SESSION_ID}
    /element/${ELEMENT_ID}/value)
    #() URI

    View Slide



  20. TITLE=""
    while [ "${TITLE}" != " OSC19do - Google " ]
    do
    RESPONSE=$(http GET ¥
    localhost:9515/session/${SESSION_ID}/title)
    TITLE=$(echo ${RESPONSE} | jq -r .value)
    done

    View Slide


  21. RESPONSE=$(echo ¥
    ”{¥“using¥”:¥”link text¥”,¥
    ¥“value¥”:¥“6/1 OSC19do – connpass¥”}” | ¥
    http POST localhost:9515
    /session/${SESSION_ID}/element)
    # ( ) URI
    # ELEMENT_ID
    ID
    ELEMENT_ID=$(echo ${RESPONSE} | jq -r .status)

    View Slide



  22. http POST ¥
    localhost:9515
    /session/${SESSION_ID}
    /element/${ELEMENT_ID}/click
    # () URI

    View Slide

  23. iFrame
    STATE =""
    while ["${STATE}" != 0 ]
    do
    RESPONSE=$(echo "{¥"id¥":{¥"ELEMENT¥":¥"${ELEMENT_ID}¥"}}" | ¥
    http POST ¥
    localhost:9515/session/${SESSION_ID}/frame)
    TITLE=$(echo ${RESPONSE} | jq -r . status)
    done
    iFrame

    View Slide

  24. (
    )
    http DELETE localhost:9515/session/${SESSION_ID}
    pkill chromedriver

    View Slide





  25. View Slide


  26. bash" '%# Google Chrome
    • Chrome Driver
    • http!&($HTTP' "# Chrome Driver


    • JSON
    https://github.com/hirokundayon/Emily

    View Slide



  27. View Slide

  28. View Slide


  29. (^.^)/~~~

    View Slide