selenium 은 웹브라우저를 자동 실행하여 조종하는 기능을 가진 모듈이다.

 

대표적인 기능은 웹사이트에 자동으로 로그인하여 이메일을 보내거나 웹사이트 내의 링크 주소로 추적하는 등의 일을 할 수 있다.

 

불과 몇년전까지만 해도 국내 포탈에 자동 로그인이 가능했었으나 현재는 많이 막아놨다. 네이버와 카카오다음의 로그인을 테스트 해봤으나 둘다 셀레니움으로 자동로그인은 불가능했다. 네이버는 캡챠 문자를 입력해서 로봇이 아님을 증명해야 한다. 카카오다음은 카카오톡에 연결된 전화에서 매번 확인을 받아야 로그인이 된다.

 

두개가 국내에서 제일 많이 쓰는 포탈인데 이 둘을 막아놨으면 의미가 많이 떨어진다. 웹사이트를 검색해보니 네이버는 작년에 막힌 것 같다. 아마 자동 로그인에 의한 해킹공격에 대응하기 위해서 원천 차단한 것으로 보인다. 확실히 위험한 기술이긴 하다. 셀레니움을 사용한 프로그램을 사용하면 짧은 시간동안에 특정 사이트나 실시간 검색어의 집계에 영향을 미칠 수 있다.

 

직접 해보진 않았지만 이런 시나리오도 짜볼 수 있다.

 

하나의 PC에 가상 OS를 여러개 구축하고 각각 다른 VPN을 접속시킨다.

 

자동으로 브라우저를 실행시켜 로그인 후 키워드를 입력하여 특정 사이트 들을 접속하고 로그아웃 한다.

 

VPN을 바꿔 접속하여 다시 반복한다. 이 모든 과정은 사전에 정의한 스크립트만으로 운영이 가능하다.

 

구체적으로 숫자를 넣어보면 PC 100대로 3개의 가상 OS를 실행시켜서 로그인 및 검색 후 3개의 키워드로 웹페이지를 접속하는 행동을 5분 단위로 한다고 가정한다.

 

PC 100대 * OS 3개 = 300 명 * 3개 키워드 = 900번 검색

900 * 12 (1시간에)회 = 1,080 번 조회수를 올릴 수 있다.

 

키워드를 3개로 한 것은 사람들은 똑같은 주제에 대하여 여러가지로 검색하기 때문이다. 예를 들어 손흥민을 검색할 때,'손흥민', '손흥민 골', '손흥민 중계' 같이 유사한 검색어를 넣는다. 이것은 전부 손흥민에 대한 검색어이다.

 

예전에 한 유튜버가 조회수가 어느정도 되야 실시간 검색어에 오르냐를 놓고 시험한 적이 있었는데 하루 약 5만명 정도가 검색을 하면 1위가 된다고 한다. 또한 영상에서는 돈을 받고 실검에 올려주는 브로커들도 존재한다는 재보자의 말도 들을 수 있다. (주로 블로그 관련한 실검을 이야기한다, 금액이 ㅎㄷㄷ,,,)

 

 

유튜브 영상

PC 100대의 가상환경으로 계산한 것은 절대값은 아니다. 또 다른 방법이 있을 수 있다고 보기 때문에 적게 잡은 것이다. 100대 정도로 1000회 이상 조회수를 올릴 수 있다는 것은 하루 24시간 가동하면 2만4천회이다. 200대로 잡으면 1일 5만회도 불가능하지 않다. 즉 조작이 가능한 수준이라는 것이다. 조작을 한다 안한다는 이야기보다는 기술적으로 생각해보면 가능한 부분이라는 것을 알고 있어야 한다. 조작은 절대 불가능하다고 믿는 사람들도 있기 때문이다.

(불가능하다고 믿는 사람이 더 많을 것이다.)

 

 

물론 네이버의 보안 시스템이 24시간 모니터링으로 이상 트래픽을 감지하여 차단하고 있을 것이라 믿는다. 최근에는 자동 로그인 차단 등의 조치로 조회수 조작하는 것이 훨씬 어려워 졌을 것이다. 뭐 한편으로는 그래도 사람이 하는일이라 모든 것을 막을 수는 없을 것이다. 진짜 조회수 올리려고 사람이 하거나 OS 자체를 해킹하면 가능할 것이다. 결국 기계가 조작하는 것인 것이 발각되지만 않으면 그만이다. 기계를 사람처럼 프로그래밍 하면 된다.

 

 

*selenium 이야기가 길어졌는데... 요새는 웹사이트에 마음대로 자동 로그인은 호락호락하지 않다. 그리고 본래 이 selenium 의 모듈은 해킹이나 트래픽 공격이 아니라 웹사이트 테스트를 자동화하려고 만들었다.

 

크로스 플랫폼(크롬,파이어폭스,엣지, 오페라)이며 모바일 환경에서의 테스트도 가능하다. (아래 영상)

 

모바일 테스트

 

selenium 이 어떤 것인지 간단한 예제를 통해 알아본다.

 

예제 1) 클립보드에 있는 문자열에 대한 다음 검색 결과를 보여준다.

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pyperclip

keyword = pyperclip.paste()
driver = webdriver.Chrome("d:\\chromedriver.exe")
driver.get("https://www.daum.net/")
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys(keyword)
elem.send_keys(Keys.RETURN)

크롬브라우저 상단에 보면 Chrome 이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다라고 표시된다. 현재 크롬은 사람이 조작하는 것이 아닌 것을 인지하고 있다. 다음에서도 자동 로그인은 되지 않지만 검색까지 막아놓지는 않았다.

 

 

현재 검색결과의 내용을 다운로드하여 BeautifulSoup 에 넘겨줘서 자료를 추출하는 것도 물론 가능하다.

 

지난 포스팅에서 BeautifulSoup4 를 다루었다. 

 

파이썬 | 웹스크레이핑 기초 | BeautifulSoup 모듈 사용법

이번 포스팅도 간단한 내용이다. BeautifulSoup4 모듈을 다운로드 받아서 간단한 웹스크래이핑을 해본다. 설치는 명령 프롬프트에서 pip install bs4를 입력한다. 인스톨 되었다면 위와 같은 내용이 출��

digiconfactory.tistory.com

셀레니움을 사용하기 위해서도 pip install selenium 으로 설치할 수 있다. 그리고 브라우저를 움직이려면 webdriver를 설치해야한다.

 

브라우저에 따라 드라이버가 다르다. 예제 코드는 크롬 브라우저를 사용한다. driver 객체 생성시 webdriver 가 저장된 경로를 입력한다.

 

만약 실행이 안된다면 파이썬 실행시에 webdriver 버전과 크롬 브라우저 버전이 다르다는 메시지가 나올 것이다. 자신에게 맞는 버전을 다운로드 받으면 해결된다. 어떤 버전인지 몰라도 실행해보면 버전의 차이가 있다는 것을 파이썬이 알려준다.

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

driver 객체는 웹사이트에서 특정 태그나 요소를 찾을 수 있는 메서드를 제공한다. 상당히 많은 메서드들이다.

 

아래의 두개 사이트에 documentation 이 정리되어 있다. 선택자 부분은 CSS를 별도로 알고 있어야 한다.

 

Selenium Documentation — Selenium 3.14 documentation

 

www.selenium.dev

 

 

Selenium with Python — Selenium Python Bindings 2 documentation

Note This is not an official documentation. If you would like to contribute to this documentation, you can fork this project in Github and send pull requests. You can also send your feedback to my email: baiju.m.mail AT gmail DOT com. So far 40+ community

selenium-python.readthedocs.io

 

예제2) 두번째 예제는 다나와라는 웹사이트에 자동 로그인 예제

 

구글은 물론 네이버나 카카오 등 자동 로그인이 안되는 곳이 많지만 여전히 되는 곳도 많다. 보안 정책에 따른 차이일 것이다. 보안 정책이 낮은 것이 사용자 입장에서 좋다고 할 수는 없겠지만 기업입장에서는 관리 비용도 만만치가 않다. 그래서 자동 로그인이 된다고 절대 낮게 보면 안된다. 네이버도 몇 십년간 잘 쓰다가 요 몇년 사이에 자동로그인을 막았다.

 

그리고 다나와는 국내 제1의 가격비교사이트다. (특히 컴퓨터 부품) 여기 컴퓨터 부품값등은 실시간 변동성때문에 충분히 크롤링의 가치가 있다.

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome("d:\\chromedriver.exe")
driver.get("https://auth.danawa.com/login")
print(driver.current_url)
print(driver.name)
elem = driver.find_element_by_name("id")
elem.clear()
elem.send_keys("아이디")
elem = driver.find_element_by_name("password")
elem.send_keys("패스워드")
elem.send_keys(Keys.RETURN)

print(driver.current_url)
print(driver.title)

심플하다. 로그인 창을 열고 아이디와 패스워드를 입력하여 로그인 된 상태로 들어간다.

 

역시 크롬브라우저에 자동화 표시가 뜬다.

 

로그인 후에 수행할 동작을 작성할 수 있다. 예를 들어서 검색창에 rtx 3080를 넣어서 보고 싶다. 그러면 뒤에 다음의 추가 동작을 기술한다.

elem = driver.find_element_by_name("k1")
elem.send_keys("rtx 3080")
elem.send_keys(Keys.RETURN)

그러면 키워드를 넣어서 검색을 한다. 셀레니움은 브라우저를 직접 조작하면서 하기 때문에 조금 느리다. 리소스가 웹브라우저에 다 도착할 때 까지 기다리기 때문에 시간이 걸린다는 점에 주의한다.

 

 

다음 코드는 상품리스트 페이지에서 현재 판매중인 상품의 리스트를 스크랩한다.

 

상품 판매 회사는 그래도 클래스 이름이 정돈이 잘되서 포탈들에 비해 수월하다. 포탈들은 다양한 섹션을 메인페이지에 모아놓기 때문에 굉장히 복잡하다, 세상 모든 분류를 한 페이지에 집어 넣으려다 보니 복잡하게 된 것 같다.

 

여기서는 click_log 이 클래스가 상품들을 감싸는  a 태그의 클래스이다. 클래스 이름으로 리스트를 가져올 수 있다. 

elem = driver.find_elements_by_class_name("click_log_product_standard_title_")
for i in range(len(elem)):
    print(i,":",elem[i].text)

 

selenium 으로도 html 파일이 조작 가능하지만 BeautifulSoup 의 다양한 선택자를 사용하고 싶은 경우 다음의 코드를 추가한다.

from bs4 import BeautifulSoup

content = driver.page_source
soup = BeautifulSoup(content,'html.parser')
for aTag in soup.find_all('a'):
    print(aTag.get('href'))

 

이 중에서 아래의 부분이 selenium에서 BeautitulSoup 으로 넘겨주는 코드이다.

content = driver.page_source
soup = BeautifulSoup(content,'html.parser')

 

위의 링크를 선택하여 다시 이동하는 것도 가능하다. 이렇게 이동하다보면 짧은 시간에 다량의 트래픽을 유발할 수 있으니 서버에 부담을 주지 않도록 주의한다.

 

웹스크레이핑이란게 기본적으로 타인의 웹서버를 대상으로 하는 작업이라 허용된 범위에서 해야한다. 사람들 눈에 보이지는 않지만 기본적으로 서버에서 트래픽의 모니터링이 되고 있다. 이에 관련하여 현재도 많은 기업들이 분쟁을 겪고 있으니 사용에 주의한다.

 

이 포스팅 서두에 언급하였듯이 자동화 프로그램으로 한대의 PC로도 짧은 시간내에 상당한 트래픽을 만들 수 있다. 티스토리 블로그도 가끔씩 트래픽이 폭증하는 경우가 있다. 웹상의 정보를 보면 많은 블로거들이 한번쯤 알수없는 방문자 증가를 경험한 사례가 있다. 이런 경우 티스토리 방문자 분석에 들어가 보면 집중적인 크롤링 테스트 같은게 있었던 것이 아닌지 의심하게 된다.

 

 

어쨋든 셀레니움을 잘 사용하여 업무 자동화에 도움이 되기를 바란다.

공유하기

facebook twitter kakaoTalk kakaostory naver band