Heroku + Selenium + Chrome으로 웹 프로세스 자동화

Heroku + Selenium + Chrome으로 웹 프로세스 자동화



  • Heroku + Selenium + Chrome으로 웹 프로세스 자동화
  • 소개
  • 목적
  • 관련 기사
  • 실행 환경
  • 소스 코드
  • 시나리오 및 전제 조건
  • 자동 프로세스 작성
  • Python API 구성
  • API 메인프레임
  • FX 레이트 획득
  • Heroku 설정
  • Chrome 및 Driver 설정
  • 드라이버 버전 설정


  • 소개



    Mac 환경의 기사입니다만, Windows 환경도 같은 순서가 됩니다. 환경 의존 부분을 읽어보십시오.

    목적



    이 기사를 끝까지 읽으면 다음을 할 수 있습니다.
  • Selenium 및 ChromeDriver를 사용하여 웹 프로세스 자동화
  • Heroku에서 Chrome 및 드라이버 설정
  • WEBプロセスの自動化
    Yahoo! Finance의 FX 차트 레이트로부터 미국 달러/엔을 취득해 표시한다.


    브라우저에서 수동으로 표시
    자동으로 취득한 데이터 표시






    관련 기사


  • 셀레늄
  • heroku-buildpack-chromedriver.git
  • heroku-buildpack-google-chrome.git

  • 실행 환경




    환경
    Ver.


    macOS Mojave
    10.14.6

    파이썬
    3.7.3

    Flask
    1.1.1

    selenium
    3.141.0

    chromedrive
    78.0.3904.70

    google-chrome
    78.0.3904.97


    소스 코드



    실제로 구현 내용이나 소스 코드를 쫓으면서 읽으면 더 이해가 깊어질까 생각합니다. 부디 활용해 주세요.

    GitHub

    시나리오 및 전제 조건


  • Yahoo! Finance의 FX 차트 레이트로부터 미국 달러/엔을 취득해 표시한다.
  • MySQL이나 PostgreSQL에 보존하는 것을 상정하고 있습니다만, 자동화의 설명을 목적으로 하기 때문에 DB관련은 스코프외로 합니다.
  • API 프레임워크는 Flask를 채택합니다.

  • 자동 프로세스 작성



    Python API 구성



    tree.sh
    python-Selenium
      ├── fx_rate
      │   ├── __init__.py
      │   └── utility.py
      └── main.py
    

    API 메인프레임



    main.py
    import datetime
    import logging
    import os
    
    from flask import Flask
    
    from fx_rate.utility import get_fx_rate
    
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger(__name__)
    
    app = Flask(__name__)
    
    
    @app.route('/fx-rate', methods=['GET'])
    def get():
        usd_jpy = get_fx_rate()
        res = 'timestamp={}, USDJPY={}'.format(
            datetime.datetime.utcnow() + datetime.timedelta(hours=9), usd_jpy)
        logger.info(res)
        return res, 200
    
    
    if __name__ == '__main__':
        host = os.getenv('HOST', '0.0.0.0')
        port = int(os.getenv('PORT', 5000))
        app.run(host=host, port=port, debug=True)
    

    FX 레이트 획득



    utility.py
    import datetime
    
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    
    
    def get_fx_rate():
        options = Options()
        options.add_argument('--headless')
        driver = webdriver.Chrome(options=options)
        driver.get('https://info.finance.yahoo.co.jp/fx/')
        usd_jpy = driver.find_element(By.ID, 'USDJPY_top_bid').text
        driver.quit()
        return usd_jpy
    
    
    if __name__ == '__main__':
        usd_jpy = get_fx_rate()
        print('timestamp={}, USDJPY={}'.format(datetime.datetime.utcnow() +
                                               datetime.timedelta(hours=9), usd_jpy))
    

    Heroku 설정



    Chrome 및 Driver 설정



    Settings > Buildpacks 섹션의 Add buildpack에서 다음을 추가합니다.




    빌드 팩
    URL


    chromedrive
    htps : // 기주 b. 이 m / 헤로 쿠 / 헤로 쿠-부이 LD 파크 - ch 로메 dri ゔ ぇ r. 기 t

    google-chrome
    htps : // 기주 b. 이 m / 헤로 쿠 / 헤로 쿠-부이 ld 빠 쿠 - 오 ぇ - ch 로메. 기 t

    Herokuへデプロイすると自動でインストールされます。事前にご登録ください。すでにデプロイ済みやソースコードを変更せずに再デプロイする場合は、以下の空コミットをお試しください。
    allow_empty.sh
    ~$ git commit --allow-empty -m "allow empty commit"
    ~$ git push heroku master
    

    드라이버 버전 설정



    일반적으로 설정이 필요하지 않습니다. Chrome이 버전을 업그레이드했을 때와 같이 chromedrive와 google-chrome에서 버전이 다른 경우 chromedrive 버전을 지정해야 합니다.
  • Settings > Config Vars 섹션에서 Reveal Config Vars를 클릭하십시오.

  • KEY 및 VALUE를 입력하고 추가를 클릭합니다.




  • KEY
    VALUE


    CHROMEDRIVER_VERSION
    지원 버전(예: 78.0.3904.70)

    좋은 웹페이지 즐겨찾기