[python Selenium macos]ケイスト道徳と安全課程ローリングマクロ人権編


KAIST倫理とセキュリティ[Human Rights and Gender Equality]専用コード
ケイスト修士の新入生は義務的に倫理の授業を受けなければならない.授業の内容が多くて、座って聞くのは難しいです.放送のように放送できないんですか?10分おきにシャットダウンボタンを押すのは面倒です.しかし、私はそう思いません.だから試験を受けなければなりません.耳に入れる必要があると思います.だから、クローラーを編みました.
Objective
  • 「KAIST倫理と安全」の各科目が自動的に受講するアルゴリズム.
  • 授業が終わった後、毎日クリックする必要はなく、自動的に次の授業を再確認します.
  • Coding Environment
    macOS, Python, Selenium, Jupyter Notebook
    0.開発環境の設定
    a)Python 3.x以降のインストール
    https://www.python.org/downloads/
    Pythonのホームページでx以降のバージョンをインストールします.pipは自動的にインストールされるからです.
    pipを使用すると、Seleniumを含む複数のモジュールをオンラインでロードできます.
    b)取付ブラケット
    Webスクロール用のモジュールで、インターネットブラウザを直接操作(クリック、入力)するために使用されます.特にjavascriptのように動的に編成されたページを操作することができます.ここではseleniumでWebページをクリックして自動化します.
    Pychatchを使用する場合はterminalに次のメッセージを入力してインストールできます.
    sudo pip install selenium	//MacOS
    しかし、なぜこのようにしてもPychatにインストールされていないのか分からないので、PychatにInterpreter Settingsでインストールしました.しかし,実際の作業過程ではPychatは使用されていないため,上記の過程を行う必要はない.Anacodaをインストールすると、JupyternetbookにSeleniumが自動的に内蔵されるからです.
    c)AnacodaインストールとJupyter Notebookランチ
    https://www.anaconda.com/products/individual
    Jupyter Notebookを使用すると、Seleniumを個別にインストールする必要がなく、レベルごとに実行することができ、Pychatよりもコードを書くことができます.Pychatは、コードを変更するたびに1行目からコードを再読み込みしますが、JupyTernetbookは段階的に実行できるため、より直感的です.
    d)クロムドライバのインストール
    http://chromedriver.chromium.org/
    クロムドライバは、クロムブラウザを制御できるファイルです.入力コードの開発環境とChromeブラウザをつなぐ架け橋です.使用しているChromeバージョンと一致し、上のリンクからダウンロードし、処理するPythonファイルと同じフォルダに入れます.
    1.Saleniumモジュール@Jupyter Notebookを読み込む
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.alert import Alert
    from selenium.webdriver.common.by import By
    import time
    2.Webドライバの定義と実行
    コードを作る準備ができています.このdriverを呼び出してブラウザにコマンドを発行することができます.
    driver = webdriver.Chrome()
    3.道徳課ホームページへの登録
    ここから、マウスとキーボードで操作するプロセスをコードで実現します.
    使用方法は次のとおりです.
    - driver.get(「url」):urlに接続します.
    - driver.find_element(By.XPATH, 'xpath').click():特定の要素を検索してクリックします.
    - driver.find elementby xpath(「xpath」):私が使用しているCeleniumバージョンでは、この方法を古いバージョンと呼ぶ警告があります.だから直接上の方法を使います
    - driver.暗黙wait():ページのロードを待つ.n秒後、次のコマンドを使用します.
    # 웹사이트 접속
    driver.get('https://humanrights.kaist.ac.kr/')
    driver.implicitly_wait(3)
    
    # '나의 강의실'클릭
    driver.find_element(By.XPATH, '//*[@id="contents"]/div/div/div[2]/div[1]/ul/li[1]').click()
    da = Alert(driver)
    da.accept() # 팝업 처리
    
    # '포탈 로그인' 바로가기 클릭
    driver.find_element(By.XPATH, '//*[@id="content"]/p[2]').click()
    
    # 카이스트 통합 로그인 새 페이지 -> 아이디입력
    driver.find_element(By.ID, "IdInput").send_keys('sojungnoh')
    # 간편 인증 클릭
    driver.find_element(By.XPATH, '/html/body/div/div/div[2]/div/div/fieldset/ul/li[2]/input[1]').click() 
    # 여기서 얼굴 인증 -> 페이지 닫음
    driver.implicitly_wait(5) # 이후 자동으로 메인 페이지 안착
    *ログイン関連
    セレンを検索してログインすると、IDやPWを入力するのが普通ですが、KAISTのログインはちょっと面倒なので、携帯電話で顔認証が必要です.幸いなことに、このプロセスはコードを書くときに何の問題もありません.携帯電話にアカウント情報があれば直接認証すればいいですでは、次のコマンドに自動的に移動します.
    *Message: no such element: Unable to locate element
    必要なコードを入力して実行すると、上記のメッセージが表示されることがあります.このとき、ブラウザはすべての要素をロードしていないうちにコマンドを発行するので、要素が見つかりません.そんな時は待ちます.次のリンクには良い説明があります.
    https://pythondocs.net/selenium/%EC%85%80%EB%A0%88%EB%8B%88%EC%9B%80-wait-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-implicitly-wait-vs-explicitly-wait/
    4.カリキュラム・リストへのアクセス
    # '나의강의실'클릭
    driver.find_element(By.XPATH, '//*[@id="contents"]/div/div/div[2]/div[1]/ul/li[1]').click()
    # '학습하기' 클릭
    driver.find_element(By.XPATH, '//*[@id="content"]/table/tbody/tr[2]/td[3]/a[1]').click()
    5.プレイヤーをクリックして自動連続再生★
    この部分は今回のミニプロジェクトの核心部分です.授業が終わると自動的に次の授業のアルゴリズムが再生されます!この部分には多くのエラーがあり、Jupeterノートパソコンを使うのは光る場所です.この部分だけが切り取って運転できるからです.
    カリキュラムリストxpathvariable 1講'/*[@id="content"]/table/tbody/tbody/tr[ 2]/td'22講]//[@id="content"]/table/tbody/tr[ 3]/td]/[@id="content]/td/td)//td'4 n'/td]/td]/td)//td]/td]/td/td)/td/td/td/td/td/td][td][td][td][td]/td]/td][td][td][td]/td][td][td]/td][td][td]/td][td][t/td][td]/td)/td][td]/td][td]/td)/td]/t
    講義内容に基づいて,ビデオ再生ボタンが持つxpathモードを把握し,{}として保持し,formatを用いて重複文に適用する.川は29本あり、rangeは(2,30)です.
    #플레이어 클릭 및 재생 반복
    for i in range(2,30):
        # 수강항목 선택
        driver.find_element(By.XPATH, '//*[@id="content"]/table/tbody/tr[{}]/td[4]/a'.format(i+1)).click()
        driver.implicitly_wait(5)
        # 팝업 뜨면 재생버튼 클릭
        driver.find_element(By.ID, 'play-pause-button').send_keys(Keys.ENTER)
        wait = WebDriverWait(driver, 600) 
        wait.until(EC.alert_is_present()) # 알람이 등장할때까지 기다려라. 단 600초가 지나면 다음으로
        # 종료되면 
        da = Alert(driver)
        da.accept()
        print('{}차 수강완료'.format(i))
    
    print('수강종료')
    send keys(Keys.ENTER):ビデオプレーヤーはclick()メソッドを使用しません.これは、要素が画面から離れていることを意味しているようです.そんなときはsend keys()メソッドで代用します.
    Alert(driver).accept():こいつのホームページにはポップアップ広告が多いですね.ポップアップウィンドウはChromeコンソールでhtmlコードで見つかりません.そこで「Celeniumポップアップ」を検索すると、ポップアップに対応する方法がありました.セレンライブラリからAlertを読み込み、「OK」をクリックします.
    再生により、完了するたびに受講が完了し、以下の結果が得られます.
    1차 수강완료
    2차 수강완료
    .
    .
    .
    28차 수강완료
    29차 수강완료

    P.S.の中で別のことをするために作ったコードは、実行してこの文章を書くときにヒューマンRightsとGender Equalityに集中して聞きました昔ながらの内容だと思っていたが、想像以上に集中して聞く価値があり、聞くべきではない倫理講座.この文章を見た人も声を消すことなくラジオのように聴けたらいいのに