팬페이지를 만들고 이것저것 업데이트를 하던 도중 방문자를 모으기 위해 홍보를 해야할 필요성을 느꼈다.

어디다가 홍보를 해야지 효과가 좋을까 고민하던 도중 역시 방문자를 모으기에는 디시만한 곳이 없다고 생각해서 디시에 자동으로 글을 작성해서 팬페이지를 홍보하는 매크로를 만들기로 했다! (크롤러 봇들이 디시는 자주 수집하니 검색엔진 노출기회도 노리자..!)

우선 매크로를 위해 selenium을 사용하기로 했다.

Selenium이란?

웹테스트 자동화 도구로 많이 사용되고 있으며 JS로 렌더링이 완료된 후의 결과물에 접근할 수 있다. 즉, 실제로 브라우저를 조작할 수 있게끔 해주는 도구이다.

#selenium 설치
$ sudo pip install selenium

#config파일 사용을 위한 configparser 설치
$ sudo pip install configparser

준비가 다 되었으면 이제 python으로 매크로를 만들어보자!

selenium으로 이용할 브라우저로는 크롬을 선택했다. selenium으로 크롬을 조작하려면 크롬 드라이버가 필요하다.

https://sites.google.com/a/chromium.org/chromedriver/downloads

위 주소에서 다운로드 받아 파이썬 코드 파일과 같은 경로에 위치시켜 주자.

# -*- coding: utf-8 -*- 
#write.py

from selenium import webdriver
import time
import configparser

Config = configparser.ConfigParser()

#config 파일 로드
Config.read('./info.conf')
id = Config.get('dc', 'id')
pw = Config.get('dc', 'pw')

URL = 'http://www.dcinside.com'
GALL = 'http://gall.dcinside.com/board/write/?id=lovelyz'
options = webdriver.ChromeOptions()

#headless 모드
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")

#user-agent 변경
options.add_argument("user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")

#크롬 드라이버 로드
driver = webdriver.Chrome('./chromedriver', chrome_options=options)

driver.implicitly_wait(3)
#메인 페이지 로드
driver.get(URL)
time.sleep(3)

#로그인 구간
driver.find_element_by_name('user_id').send_keys(id)
driver.find_element_by_name('password').send_keys(pw)
driver.find_element_by_id('login_ok').click()

#글작성 페이지 로드
driver.get(GALL)
time.sleep(3)

#글작성 구간
driver.find_element_by_name('subject').send_keys(u'1일 1러블리즈')
driver.find_element_by_id("tx_switchertoggle").click();
time.sleep(1)

driver.switch_to_frame(driver.find_element_by_xpath("//iframe[@name='tx_canvas_wysiwyg']"))
driver.find_element_by_tag_name("body").send_keys(u"<img src='http://sodeok.xyz/lovelyz.gif'><br><br><br><a href='http://lovelyzfan.xyz' target='_blank' class='tx-link'>러블리즈 이미지 갤러리</a>")

driver.switch_to_default_content()
driver.find_element_by_xpath("//input[@src='http://nstatic.dcinside.com/dgn/gallery/images/btn_save.gif']").click()
time.sleep(1)
driver.quit()

그런 다음 위와 같이 파이썬 코드를 작성해주면 되는데 GALL에 담긴 주소 값이 내가 홍보할 갤러리의 글작성 주소값이다.

서버에서 매일 1회씩 자동으로 홍보할 생각이기 때문에 크롬 옵션에서 headless를 추가한다.

headless 옵션은 실제 브라우저의 구동되는 모습(visual) 없이 브라우저를 조작할 수 있게끔 해준다. 다만 headless옵션을 추가할 경우 디시에서 다른 페이지로 포워딩을 해버리므로 user-agent를 조작하여 이를 회피한다. (headless옵션 사용시 user-agent에 headless가 추가되는데 이를통해 필터링하는것 같다. 그럼으로 user-agent를 일반 pc브라우저처럼 변경한다.)

주목할점은 driver.switch_to_frame 부분인데 디시의 경우 글 작성시 글 내용이 ifream형태로 들어가 있어서 fream switching을 통해 body(실제로 글 내용이 들어가는곳)를 찾아준다.

나는 글 작성시 이미지와 함께 팬페이지 링크를 홍보하도록 했다.

또한, 중간 중간에 delay가 들어가 있는데 이는 페이지가 충분히 로드 된 뒤에 다음 동작을 할 수 있게끔 한 것이다.

이제 python write.py를 통해 제대로 글 작성이 되는지 확인해보자!

글작성이 제대로 되는것을 확인했으면 이제 서버에서 crontab에 매일 00시 정각마다 write.py를 구동하는 스크립트를 작성하여 추가하자!