-
[Python] 파이썬 웹 크롤링 - Selenium 이용한 트위터 자동 로그인 매크로 봇 만들기 (1) - 단일 계정Dev/Python 2022. 12. 22. 23:44728x90
파이썬 크롤링
추후 포트폴리오를 만들 때 웹 크롤링과 Ai를 활용한 웹서비스 프로젝트를 하고 싶다는 막연한 생각 중에
종강 후 여유가 있을 때 하나씩 공부해보면 좋을 것 같아 우선 크롤링부터 정리해보려고 합니다.
이론위주보다는 실습을 통해 학습하는 것이 효율적이라 생각되어
트위터 자동 로그인 구현을 통해 Selenium 기초를 학습하고자 합니다.
Selenium(셀레니움) 이란?
셀레니움은 자동 데이터 수집 등 브라우저를 사용하는 작업을 자동화시킬 수 있는 파이썬 패키지이다.
따라서 셀레니움을 이용하여 크롬 브라우저 자동 실행, 자동 반복 작업을 통해 자동 매크로 프로그램을 만들 수 있다.
크롬 드라이버(Chrome Driver) 설치 - 크롬 브라우저 동작을 위한 환경 설정
ChromeDriver - WebDriver for Chrome - Downloads
Current Releases If you are using Chrome version 109, please download ChromeDriver 109.0.5414.25 If you are using Chrome version 108, please download ChromeDriver 108.0.5359.71 If you are using Chrome version 107, please download ChromeDriver 107.0.5304.62
chromedriver.chromium.org
위 사이트에서 설치된 크롬 브라우저와 같은 버전으로 다운로드하여, 파이썬 프로젝트 소스코드와 동일한 경로에 두어 사용할 수 있다.
하지만, 크롬 업데이트시 매번 버전에 맞는 버전을 다운로드하여야 하므로 번거로운 경우가 많다.
pip install selenium
pip install chromedriver-autoinstaller
''' 크롬 드라이버 자동 다운로드 코드 ''' import os from selenium import webdriver import chromedriver_autoinstaller chromedriver_autoinstaller.install(True) # True여야 폴더 생성 후 파일 다운로드된다. chromedriver_path = f'./{chrome_ver.split(".")[0]}/chromedriver.exe' #해당 파일 경로에 크롬드라이버 다운. 이미 파일이 존재할 경우, 업데이트 된다. # 테스트 url = 'https://www.naver.com' driver = webdriver.Chrome() driver.get(url) driver.implicitly_wait(3)
selenium과 chromedriver-autoinstaller 패키지를 설치하고, 위의 코드를 실행시키면 정상적으로 해당 프로젝트 폴더에 버전에 맞는 크롬드라이버가 설치된다.
트위터 자동 로그인 해보기
필요한 라이브러리
# import necessary libraries import pyperclip #Copy + paste, 클립보드를 사용하기 위한 라이브러리 (웹 크롤링 봇 탐지 우회용) from selenium import webdriver from selenium.webdriver.common.keys import Keys #키 입력을 위한 라이브러리 from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By #태그 값을 추출하기 위한 라이브러리 (By.XPATH 사용) import time
Chrome webdriver 인스턴스 생성, 크롬 창 최대화, 홈페이지 켜기
# instantiate the Chrome class web driver and pass the Chrome Driver Manager driver = webdriver.Chrome(ChromeDriverManager().install()) # 크롬창 최대화 driver.maximize_window() # 트위터 로그인 홈페이지 이동 driver.get("https://twitter.com/login") time.sleep(3) # 화면 켜지기 까지 대기 필요
1. 셀레니움이 크롬을 열고 브라우저를 제어하기 위해서 ChromeDriverManager를 인자로 전달하여 크롬 웹 드라이버를 인스턴스화해야 한다.
2. maxinize_window() 메서드 이용하여 열린 크롬창을 최대화할 수 있다.
3. get() 메서드 이용하여 해당 트위터 로그인 홈페이지를 방문한다.
트위터 로그인 과정 자동화
트위터 로그인 화면 # 아이디(이메일 입력) loginEmail = "아이디(이메일) 값" #아이디 입력 pyperclip.copy(loginEmail) driver.find_element(By.XPATH, '해당 입력 창 XPATH').send_keys(Keys.CONTROL + 'v') #붙여넣기 time.sleep(3) # 다음 버튼 클릭 driver.find_element(By.XPATH, '해당 다음 버튼 XPATH').click() time.sleep(3)
크롤링 봇 방지를 회피하기 위해 pyperclip을 이용하여 클립보드를 사용한다.
driver.find_element() 메서드를 이용하여 해당 요소(input 버튼)에 대한 XPATH 값을 넣고, send_keys() 메서드에 클립보드에 저장된 아이디 값을 넣어 해당 요소 버튼에 값을 붙여 넣는다.
* trouble shooting : 셀레니움 이전 3 이하 버전에서는 driver.find_element_by_xpath() 메서드를 사용했으나
4 버전 이상에서는, driver.find_element() 메서드에 By.XPATH 값을 인자로 주어 사용한다.
[다음] 버튼 클릭을 위해 해당 버튼에 대한 XPATH를 받아오고, click() 메서드를 이용해 실제 크롬에서 클릭되도록 한다.
크롬 개발자 도구에서 해당 input 부분의 xpath 값 추출
해당 요소 코드 우클릭 비정상적인 시도 휴대폰 번호 또는 아이디 입력창
트위터에 여러 번 로그인하면 위와 같은 화면이 뜬다. (로그인 자동화 과정에 위의 과정을 포함했습니다.)
#비정상적인 로그인 아이디 입력 loginID = "아이디 또는 휴대폰 번호" pyperclip.copy(loginID) driver.find_element(By.XPATH, '해당 XPATH').send_keys(Keys.CONTROL + 'v') #붙여넣기 #다음 버튼 클릭 driver.find_element(By.XPATH, '해당 XPATH').click() time.sleep(3)
마찬가지로 휴대폰 번호 또는 사용자 아이디 입력 창과 다음 버튼에 대한 XPATH을 처리한다.
#비밀번호 입력 loginPW = "비밀번호" pyperclip.copy(loginPW) driver.find_element(By.XPATH, '해당 XPATH').send_keys(Keys.CONTROL +'v') #붙여넣기 time.sleep(3) #로그인 버튼 클릭 driver.find_element(By.XPATH, '해당 XPATH').click() time.sleep(10)
마찬가지로 비밀번호 입력과 최종적으로 로그인하기 버튼을 눌러 로그인한다.
전체 코드를 실행하면 정상적으로 트위터에 로그인되는 것을 볼 수 있다!
이를 응용하면, 자동 트윗, 리트윗 등 여러가지로 활용가능한 봇을 만들 수도 있다.
다음 게시글은 단일 계정 로그인이 아닌 여러 계정을 로그인하도록 구현해 보았다.
[Python] 파이썬 웹 크롤링 - Selenium 이용한 트위터 자동 로그인 매크로 봇 만들기(2) - 다중 계정 로
Selenium 기초와 자세한 설명은 이전 게시글 참고해 주세요. [Python] 파이썬 웹 크롤링 - Selenium 이용한 트위터 자동 로그인 매크로 봇 만들기 파이썬 크롤링 추후 포트폴리오를 만들 때 웹 크롤링과
keydi.tistory.com
reference
https://goodthings4me.tistory.com/893 : 파이썬 크롬 드라이버 자동 설치
https://sualchi.tistory.com/13721870 : selenium AttributeError 'Webdriver' object has no attribute 'find_element_by_xpath
728x90반응형'Dev > Python' 카테고리의 다른 글
[python] 파이썬 데이터 분석 - 시계열 데이터 (pandas 활용, 시각화) (1) 2023.01.16 [python] 파이썬 데이터 분석 - 데이터 병합, 그룹화 (pandas 활용) (0) 2023.01.16 [python] 파이썬 데이터 분석 - 데이터 조작 (pandas, numpy 활용 - 데이터 조작, 변경) (0) 2023.01.16 [python] 파이썬 anaconda 환경 설정 명령어 (0) 2023.01.16 [Python] 파이썬 웹 크롤링 - Selenium 이용한 트위터 자동 로그인 매크로 봇 만들기(2) - 다중 계정 로그인 (2) 2022.12.23