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
의 환경 구축은 대다수 사람들이 하는 것과 큰 차이가 없기 때문에 조금 절약해서 구축해야 한다.또 Python
과pip
를 설치했다.!
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_world
의webhook
.이것만 있으면 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 Desktop
중remote
이후에야 내용이 업데이트됩니다.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
환경에서도 쓰레기 처리를 하고 싶은 사람에게 추천하는 방법을 썼어요.Google
와Cookie
가 있고 환경 변수는 간단하게 사용할 수 있습니다Heroku
가 가장 강합니다!뭐든지 할 수 있다Heroku
...정말 일찍 만나보고 싶었던 건데.뭐, 어려운 점을 하나 꼽자면
Heroku
공짜라도 신용카드를 등록해야 한다.저는 학생입니다. 신용카드가 없어서 사용할 수 없습니다Chrome Driver
.이번에 제작된 BOT는 정시에 쓰레기 처리와 데이터베이스 처리를 했지만 모두 Chrome
쪽에서 실시Heroku
하고 이webhook
에서 진행됐다.Add-on
트리거 기능은 표준이고 Add-on
도 가장 강한 데이터베이스가 있어 이쪽도 처리하기 쉽다.하지만
Google Apps Script
는 관계된 일만 할 수 있고 미래fetch
는 밝을 것 같아요.뭐랄까webhook
이렇게 크게 쓸 수 있다니...그럼, 지금까지 함께해 주셔서 감사합니다.안녕히 계세요.
Reference
이 문제에 관하여(Selenium × Python × Heroku로 Google Classroom을 덮어쓰는 BOT를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/cyber_hacnosuke/articles/70b8945783e135텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)