-
인프런 동영상 웹 스크래핑하기 - 2: 자동로그인 기능 - 1개발/웹크롤링 2022. 1. 8. 16:46
이제부터는 인터프리터가 아닌, 프로젝트로 관리하겠습니다. 저는 파이참을 이용해서 진행할 예정입니다.
우선, inf-video라는 프로젝트를 만들어주었습니다.
프로젝트 생성 참고로 아나콘다 3.9로 하니 seleniumwire가 pip에서 찾을 수 없는 상황이 발생했습니다. 그러니 애초부터 높은 버전의 아나콘다 대신 기존에 쓰던 파이썬을 이용하거나 설정을 통해서 잘 설치해주시면 됩니다. 제 경우에는 이렇게 해결했습니다.
[설정 방법]
다른 인터프리터를 사용했습니다. 그리고 프로젝트 폴더에 버전에 맞는 크롬드라이버를 설치해주셔야 합니다. https://chromedriver.chromium.org/downloads를 통해서 설치할 수 있습니다.
chromedriver.exe를 넣어주세요. 자, 시작해봅시다. 우선 video_scrapper.py를 만들어주세요.
from seleniumwire import webdriver DEST_PATH = r'C:\src\inflearn' # 파일을 저장할 디렉토리 page_url = 'https://www.inflearn.com/' # 인프런 주소 class VideoScrapper: def __init__(self): self._driver = webdriver.Chrome()
위와 같이 기본적으로 사용할 변수를 선언하고, VideoScrapper라는 클래스를 만들어줬습니다. 이제 로그인 메서드를 만들어봅시다. 로그인 메서드의 동작 순서는 다음과 같습니다.
- 페이지 접속
- 로그인 버튼 클릭해서 로그인 창 띄우기
- 입력받은 아이디, 비밀번호 입력
- 로그인 버튼 클릭해서 로그인하기
- 로그인 후 강의목록으로 들어가기
우선 1번까지 구현해봅시다.
class VideoScrapper: def __init__(self): self._driver = webdriver.Chrome() def login(self, loin_id, pwd): self._driver.get(page_url)
이렇게 인스턴스 메서드로 선언해줍니다. 그 다음에는 이전 시간에 했던 로그인 버튼 클릭해서 로그인 창 띄우는 것까지 구현하겠습니다.
def login(self, loin_id, pwd): self._driver.get(page_url) # 로그인 창을 띄우는 팝업 버튼 popup_buttons = self._driver.find_elements('class name', 'signin') for btn in popup_buttons: if '로그인' in btn.text: btn.click()
처음 보는 표현이네요. xpath로 엘레멘트를 구해봤습니다. 문서에 있는 a 태그 중 '로그인'을 innerText로 갖고 있는 엘레멘트를 구하라는 뜻입니다. 자세한 것은 xpath에 대해서 다른 문서를 읽어주세요. 그나저나 첫 번째 파라미터를 문자열 그대로 치는 게 불편하니 selenium에서 임포트해줍시다.
from seleniumwire import webdriver from selenium.webdriver.common.by import By ...
... # 로그인 창을 띄우는 팝업 버튼 popup_btn = self._driver.find_elements(By.CLASS_NAME, 'signin') ...
이렇게 쓸 수 있습니다.
이제 로그인 창까지 잘 가는지 테스트해봐야겠죠? 맨 아래에 실행 코드를 작성합니다.
if __name__ == '__main__': vs = VideoScrapper() vs.login('', '')
지금까지 작성한 전체 코드입니다.
from seleniumwire import webdriver from selenium.webdriver.common.by import By DEST_PATH = r'C:\src\inflearn' page_url = 'https://www.inflearn.com/' class VideoScrapper: def __init__(self): self._driver = webdriver.Chrome() def login(self, loin_id, pwd): self._driver.get(page_url) # 로그인 창을 띄우는 팝업 버튼 popup_buttons = self._driver.find_elements(By.CLASS_NAME, 'signin') for btn in popup_buttons: if '로그인' in btn.text: btn.click() if __name__ == '__main__': vs = VideoScrapper() vs.login('', '')
잘 작동하는군요. 다음 글에서는 로그인 입력을 받고, 페이지에 넣어서 로그인해보겠습니다.
'개발 > 웹크롤링' 카테고리의 다른 글
인프런 동영상 웹 스크래핑하기 - 마치며(최종 코드) (1) 2022.01.16 인프런 동영상 웹 스크래핑하기 - 3 : 네트워크 분석 - 2 (0) 2022.01.16 인프런 동영상 웹 스크래핑하기 - 3 : 네트워크 분석 - 1 (1) 2022.01.10 인프런 동영상 웹 스크래핑하기 - 2: 자동로그인 기능 - 2 (0) 2022.01.08 인프런 동영상 웹 스크래핑하기 - 1: 준비 과정 (1) 2022.01.08