Selenium × Python × Heroku로 Google Classroom을 덮어쓰는 BOT를 만들었습니다.

개시하다


안녕하세요.이번에는 셀레니움.× Python × Google Classroom을 비롯한 로그인하지 않으면 접근할 수 없는 서비스를 Heroku로 미리 적어두려고 합니다.

백그라운드


도대체 뭘 하고 싶은지 내가 설명할게.
우리 학교는 식당에서 저녁을 주문할 수 있는 메커니즘이 있는데 매일(다음날) 신청서Google Form를 반방Google Classroom으로 보낸다.이날 오전 10시 30분이 마감일이었지만 의외로 많은 분들이 잊고 계셔서 이를 막기 위해 만들고 싶어요LINE BOT.
!
LINE BOT는 사용Heroku이 된 이유 외에는 아무 상관이 없어 이번에는 사용하지 않기로 했다.

이번 취지


이번에 하고 싶은 일을 정리하면 다음과 같은 형식이 될 것 같습니다.
  • Heroku × Python 환경을 구축하고자 합니다.
  • Selenium에서 사용하고 싶어요Python.
  • Selenium에서 이동하고 싶습니다Heroku.
  • Selenium에 들어가고 싶어요Google Classroom(등).
  • 1. 환경 구축


    1.1. Package 설치 및 Heroku App 생성

    Python × Heroku의 환경 구축은 대다수 사람들이 하는 것과 큰 차이가 없기 때문에 조금 절약해서 구축해야 한다.또 Pythonpip를 설치했다.
    !webhook의 구축
    필요한 것을 먼저 설치합니다package.
    $ pip install flask
    $ pip install selenium
    
    이어서 Heroku 관계를 구축한다.
    $ heroku login
    
    로그인할 URL을 방문하십시오.
    !Heroku 계좌번호 필요이쪽에서 미리 제작해주세요.
    응용 프로그램을 생성합니다.또한 폴더를 즉석에서 생성해야 하기 때문에 폴더를 이동한 후에 실행하십시오.
    $ heroku create -a <app-name>
    $ cd <app-name>
    
    !
    이번에는 Heroku의 프로그램 이름이 <app-name>로 표시되므로 적당히 다시 읽어 주십시오.
    이렇게 되면 우선 완성된다.

    1.2. 프로파일 준비


    다음으로 파일을 만들어 응용 프로그램deploy으로 준비합니다.
    방금 생성된 <app-name> 폴더에서 생성main.py합니다.
    !
    아니어도main.py 괜찮아요. 이후 설정은 조금 달라질 거예요.main.py에 임시 코드를 쓰세요.
    main.py
    from flask import Flask, request, abort, jsonify
    import os
    from time import sleep
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello_world():
        return "hello world!"
    
    
    이렇게 하면 hello_worldwebhook.이것만 있으면 Heroku 움직일 수 없다.추가 구성 파일이 필요합니다.
    python의 버전과 설치된 package 버전을 확인합니다.
    $ python --version
    $ pip freeze
    
    폴더에 다음 세 개의 설정 파일<app-name>을 생성합니다.runtime.txt 방금 확인한 python버전을 기입하세요.
    runtime.txt
    python-3.10.4
    
    requirements.txt 필요한 거 Heroku 알려줄게.방금 package 출력한 것 중에서 필요한 것만 뽑아요.
    requirements.txt
    Flask==2.1.0
    selenium==4.1.3
    
    마지막으로 pip freeze에 실행 방법을 가르친다.
    Procfile
    web: python main.py
    
    !
    파일 이름은 Heroku이 아니라 Procfile.txt입니다.
    이렇게 되면 초기 설정이 완성된다.다음은 Procfile죠.

    1.3. Heroku에게 줄 Deploy.

    Heroku에서 deploy를 사용하려면 설치를 완료하십시오.deploy 제출.
    $ git init
    Initialized empty Git repository in .git/
    
    우선 git의 창고와 연결 여부를 확인한다.
    $ git remote -v
    heroku  https://git.heroku.com/<app-name>.git (fetch)
    heroku  https://git.heroku.com/<app-name>.git (push)
    
    이렇게 하면 정답입니다.없으면 아래 명령으로 전화하세요.그나저나 나는 왜 없지.
    $ heroku git:remote -a <app-name>
    
    마지막git의 방법으로 보통Heroku처럼 deploy만 한다.
    $ git add .
    $ git commit -m "My first commit"
    $ git push heroku main
    
    저는 개인적으로 사용하기 쉽다고 생각합니다git.(commit 충분히 주의하십시오.)
    !
    자신의 예비 창고push도 실행할 수 있으니 관심 있는 사람은 조사해 보세요.
    !Github Desktopremote 이후에야 내용이 업데이트됩니다.Heroku 동분서주하는 나처럼 영원히 잘못을 해결하는 것을 잊지 마세요.
    그나저나 Heroku니까 방문deploy하면 deploy나온다.

    2. 헤로쿠에서 셀레니움 이동


    빨리 운전webhook해.
    이번https://<app-name>.herokuapp.com/은 대응hello world!을 위해 실시됐다.
    main.py
    # ...省略
    @app.route("/selenium", methods=['POST'])
    def seleniumFunc():
    
      options = webdriver.ChromeOptions()
      options.add_argument('--headless')
      options.add_argument('--no-sandbox')
      options.add_argument("--disable-dev-shm-usage")
      driver = webdriver.Chrome(options=options)
      driver.get("<your-url>")
    
      # スクレイピング
    
      # 終了
      driver.quit()
    
    코드는 이것밖에 없어요.그러나 접촉한 사람이 알고 있는 바와 같이 Selenium기체와 https://<app-name>.herokuapp.com/selenium기체가 필요하다.이것들은 POST 쪽에서 준비하세요.
    먼저 Selenium 계기판Google Chrome 항목의 설정을 열어 주십시오.
    https://dashboard.heroku.com/apps/<app-name>/settings
    
    Chrome Driver에 다음 두 가지를 추가하십시오.
    https://github.com/heroku/heroku-buildpack-chromedriver.git
    https://github.com/heroku/heroku-buildpack-google-chrome.git
    
    이렇게 하면 아래Heroku부터 설정이 적용됩니다.
    !Heroku 아래의 <app-name>부터 설정에 적응하기 때문에 변경 내용이 없으면 공제출을 하십시오.
    이렇게 Buildpacks 중 적당한 deploy로 내용을 집행한다.물론 Buildpacks의 관할 범위이기 때문에 deploy 등의 설정은 만지작거림https://<app-name>.herokuapp.com/selenium으로 할 수 있다.

    3. Selenium 로그인 Google


    마지막으로 약간의 사은품.POST의 서비스가 우수하면 기본적으로 Flask로 할 수 있다.하지만 GET 그렇지 않아요.학생 입장에서 나는 아무것도 할 수 없다.그곳에서 커튼을 치는 일은 마땅히 방법을 강구해야 한다.@app.route("/selenium", methods=['POST']) 웹 사이트를 방문한 후Google 또는 캐시에서 로그인 정보를 읽습니다.Google Apps Script 매번 요구를 받는데, 이것만 돌파하면 아무것도 아니야.
    main.py
    # ...省略
    @app.route("/selenium", methods=['POST'])
    def seleniumFunc():
      # ...省略...
      driver.get("https://classroom.google.com/u/1/c/XXXXXXX")
    
      # ログイン情報
      login_id = "<your-google-account-mailaddress>"
      login_pw = "<your-google-account-password>"
    
      # メールアドレス入力
      el_id = driver.switch_to.active_element
      el_id.send_keys(login_id)
      el_id.send_keys(Keys.ENTER)
      sleep(5)
    
      # パスワード入力
      el_pw = driver.switch_to.active_element
      el_pw.send_keys(login_pw)
      el_pw.send_keys(Keys.ENTER)
      sleep(10)
    
      # スクレイピング
    
      # 終了
      driver.quit()
    
    이렇게 하면 자신의 취향에 따라 쓰레기 처리를 할 수 있다.간단하네.
    비밀번호를 가득 쓰는 것이 무섭다고 생각하면 기본 환경 변수를 사용할 수 있습니다.
    $ heroku config:set GOOGLE_MAILADDRESS="<your-google-account-mailaddress>" --app <app-name>
    $ heroku config:set GOOGLE_PASSWORD="<your-google-account-password>" --app <app-name>
    
    손으로 쓰는 대신 다음과 같은 방식으로 쓰면 된다.
    main.py
    # ...省略...
    login_id = os.environ["GOOGLE_MAILADDRESS"]
    login_pw = os.environ["GOOGLE_PASSWORD"]
    

    최후


    이번에는 "Selenium"입니다.× Python × Classroom 환경에서도 쓰레기 처리를 하고 싶은 사람에게 추천하는 방법을 썼어요.GoogleCookie가 있고 환경 변수는 간단하게 사용할 수 있습니다Heroku가 가장 강합니다!뭐든지 할 수 있다Heroku...정말 일찍 만나보고 싶었던 건데.
    뭐, 어려운 점을 하나 꼽자면Heroku 공짜라도 신용카드를 등록해야 한다.저는 학생입니다. 신용카드가 없어서 사용할 수 없습니다Chrome Driver.이번에 제작된 BOT는 정시에 쓰레기 처리와 데이터베이스 처리를 했지만 모두 Chrome 쪽에서 실시Heroku하고 이webhook에서 진행됐다.Add-on 트리거 기능은 표준이고 Add-on도 가장 강한 데이터베이스가 있어 이쪽도 처리하기 쉽다.
    하지만 Google Apps Script는 관계된 일만 할 수 있고 미래fetch는 밝을 것 같아요.뭐랄까webhook이렇게 크게 쓸 수 있다니...
    그럼, 지금까지 함께해 주셔서 감사합니다.안녕히 계세요.

    좋은 웹페이지 즐겨찾기