python - 모듈

python으로 포럼에 글 자동으로 올리기(selenium)

초무제 2022. 3. 30. 18:34
반응형

제가 selenium을 공부하면서 만든 매크로입니다. 최종적으로 윈도 기능인 작업 스케줄러를 이용하여 매일 지정시간에 매크로 프로그램을 작동시켜 포럼에 글을 올리는 걸 만들어볼 겁니다.

먼저 제가 selenium을 간단하게 공부한 거라 selenium설명보다는 매크로 만드는 글이 될 거 같습니다.

 

먼저 selenium은 파이썬 기본 모듈이 아니기 때문에 설치를 직접 해줘야 합니다. cmd 창에 pip install selenium을 쳐주세요. 그럼 알아서 다운로드될 겁니다. 

다운로드가 다 되셨으면 Visual Studio Code을 설치해야 합니다. Visual Studio Code설치법 까지 쓰면 글이 너무 길어져서 이거는 죄송하지만 유튜브나 다른 글을 찾아봐주세요.

 

코드를 짜기 전에 크롬 드라이버를 설치해야 됩니다. 

구글을 켜시고 맨 오른쪽 위에 있는 점 3개짜리를 클릭해 줍니다.

클릭한 다음 설정을 들어가 줍니다.

그리고 왼쪽 아래쪽에 있는 Chrome 정보를 클릭해줍니다.

Chrome 정보에 있는 버전에 앞자리를 기억해줍니다. 저는 99네요.

이제 구글에 크롬 드라이버라고 검색하고 제일 위에 있는 사이트를 들어가 줍니다.

여기 Current Releases에 있는 것 중에 앞자리가 같은 거를 클릭해줍니다. 저는 99로 시작하는 걸 클릭할게요.

여기서 윈도 버전인 제가 밑줄 친 거를 다운로드하여줍니다. 그리도 다운로드한 파일을 

이렇게 C드라이브에 옮겨 줍니다.

 

이제 코딩할 준비가 끝났습니다!

먼저 파이썬으로 tstory창을 띄워 보겠습니다.

from selenium import webdriver

url = "https://www.tistory.com/community/forum" #티스토리 포럼 주소
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
browser = webdriver.Chrome('c:/chromedriver.exe', options=options)
browser.implicitly_wait(10) # 페이지 로딩 wait(최대 10초)
browser.maximize_window() # 전체 화면으로 설정
browser.get(url) # 페이지 띄우기

from selenium import webdriver 요 코 느는 selenium 모듈을 가져오는 코드입니다.

options는 프로그램을 실행시켰을 때 오류가 없어도 오류코드가 뜨길래 오류코드를 가려주도록 하는 설정입니다. 이렇게 코드를 짜면 창이 잠깐 켜졌다가 꺼질 겁니다.

저렇게 아무 코드나 적고 줄 번호 왼쪽에 좌클릭을 하면 빨간 점이 생깁니다. 저 점은 저기에서 코드를 멈추겠다 이런 뜻입니다.  저렇게 중단점을 찍고 피로 그램을 실행하면 창이 잠깐 겨졌다 꺼지는 것이 아닌 계속 켜져 있을 겁니다.

자 이제 티스토리 포럼 창까지 자동으로 띄우는 매크로를 만들었습니다. 

프로그램으로 띄운 창에서 글쓰기를 누르면 로그인 창으로 넘어갑니다. 그럼 글쓰기를 클릭하는 코드를 짜 보겠습니다.

text1 = browser.find_element_by_css_selector("#root > div > div.content_list > div:nth-child(1) > button")
text1.click()

변수 이름은 아무거나 하셔도 되고(위 코드에서는 text1입니다) 변수 = browser.find_element_by_css_selector()

이게 저 글쓰기 버튼을 찾는 코드의 기본형입니다. 위 코드에서 괄호 안에 뭔가 어려워 보이는 게 쓰여있습니다. 저거는 저 글쓰기 버튼을 찾는 주소 같은 겁니다. 저 주소를 찾는 법은 글쓰기가 있는 창을 띄워놓고 f12를 누르면 개발자 창이 뜹니다.

그 창에서 화살표로 가리키는 저 표시를 한번 클릭한뒤에 주소를 찾고 싶은 거를 클릭해줍니다. 저이는 글쓰기의 주소를 찾고 싶으니 글쓰기를 클릭해줍니다.

그러면 저렇게 파란색으로 칠해진 코드가 뜹니다. 그럼 저 파란색으로 칠 해진 곳을 우클릭합니다.

우클릭하고 Copy -> Copy selector 을 클릭하여 selector(정확하게는 주소가 아니지만 이해하기 쉽게 하기 위해 주소라고 할게요)를 복사해줍니다. 그리고 변수 = browser.find_element_by_css_selector() 여기 괄호 안에 붙여 넣기 해줍니다.

**selector는 문자이기 때문에 "" 큰따옴표 안에 들어가 있어야 합니다.**

그럼 변수에 저이가 찾은 주소가 들어갑니다. 그리고 그 주소를 변수. click() 이렇게 하면 클릭되는 것이죠.

이제 프로그램을 실행시키면 

이렇게 로그인 창이 뜹니다. 여기서 자신이 쓰는 아이디를 글쓰기를 클릭했던 거처럼 코드를 짜줍니다. 저는 카카오톡 계정을 쓰기 때문에 카카오톡 계정 로그인을 클릭하는 코드를 짜 볼게요.

loginclick = browser.find_element_by_css_selector("#cMain > div > div > div > a.btn_login.link_kakao_id")
loginclick.click()

이제 아이디 비번을 입력할게요. 아이디 비번을 입력할 때 한번 클릭을 하고 입력하니까 클릭하는 코드를 짜고 문자를 입력하는 코드를 짜줍니다.

#아이디
id = browser.find_element_by_css_selector("#id_email_2_label")
id.click()
inputid = browser.find_element_by_css_selector("#id_email_2")
inputid.send_keys("아이디")
#비밀번호
password = browser.find_element_by_css_selector("#id_password_3_label")
password.click()
inputpassword = browser.find_element_by_css_selector("#id_password_3")
inputpassword.send_keys("비밀번호")
#로그인 클릭
login = browser.find_element_by_css_selector("#login-form > fieldset > div.wrap_btn > button.btn_g.btn_confirm.submit")
login.click()

아이디 입력 코드는 변수. send_keys("문자")입니다.

여기서 주의할 점이 아이디 입력창을 클릭하는 거 까지는 똑같습니다. 하지만 입력할 때는 또 다른 주소를 가지고 와야 합니다. 

이렇게 클릭할 주소 밑에 input이라고 쓰여있는 코드가 있습니다. input 붙어 있는 코드의 주소를 가지고 와야 저이가 문자를 입력할 수 있습니다. 그래서 제 코드도 보면 id 클릭하는 주소와 아이디를 입력하는 주소가 다릅니다. 찾기 어려우시면 댓글로 물어봐주세요. 이렇게 아이디 비번 입력하고 로그인 버튼까지 눌렀으면 코드는 거이다 됐습니다.

 

이제는 포럼에 올릴 내용을 입력해야 합니다. 여기서는 로그인할 때와 다르게 그냥 클릭할 때처럼 주소 하나만 찾아도 클릭이랑 문자 입력 둘 다 되네요.. 제가 깁게 공부한 건 아니라 왜 그런지는 모르겠네요. 알고 계신 분은 댓글로 알려주세요!

#제목
title = browser.find_element_by_css_selector("#title")
title.click()
title.send_keys("제목")
#내용
contents = browser.find_element_by_css_selector("#text")
contents.click()
contents.send_keys("내용")
#등록 클릭
write = browser.find_element_by_css_selector("#root > div > div.section_write > form > fieldset > div.wrap_btn > button.btn_tistory.btn_tistory_type5")
write.click()

이렇게 해서 자동으로 로그인하고 포럼 글까지 써주는 매크로를 만들었습니다.

프로그램 코드입니다. 카카오톡 아이디 쓰시는 분은 아이디, 비밀번호, 제목, 내용만 바꿔서 쓰셔도 될 거 같아요.

포럼 매크로.txt
0.00MB

마지막으로!

그럼 이제 마지막으로 작업 스케줄러를 이용하여 자동으로 프로그램을 실행시키겠습니다.

일단 지금 코딩한 프로그램을. exe 파일로 바꿔줘야 합니다. 그러려면 python에 pyinstaller 모듈을 써야 합니다.

일단 아까처럼 cmd창에 pip install pyinstaller을 입력하여 다운로드하여줍니다.

그다음 터미널 창에 pyinstaller -w -F.\파일 이름. py을 쳐주세요. pyinstaller -w -F 치고 파일 이름 조금 치신 다음에 tap키

누르시면 편합니다.

이렇게 치시면 됩니다. 역슬래시가 \입니다.

이렇게 입력하시면 코드가 있는 파일에 dist와 build 파일 이름. spec 파일이 생기는데 거기서 dist 파일 안에 있게 python 코드를. exe 파일로 만든 겁니다.

이제 작업 스케줄러를킵니다.

키면 처음에 이렇게 나올 거예요

여기서 기본 작업 만들기를 클릭해줍니다.

이름이랑 설명은 원하시는 대로 해주세요.

시간은 어차피 이따 설정할 거라 대충하고 넘어가 주세요.

찾아보기를 누르시고 아까 만든. exe 파일을 선택해주세요.

마침을 눌러주세요.

가운데에 뭐가 많을 거예요 그중에서 방금 만든 걸 우클릭하고 속성을 클릭해주세요.

트리거 누르시고 새로 만들기 누르셔서 왼쪽에서 매일 누르시고 시간까지 설정해주세요.

tstory 포럼 글은 하루에 3번 쓸 수 있으니까 3개 만드셔서 하루에 3번 동작하게도 하실 수 있습니다.

그리고 조건에 가서 이 작업을 실행하기 위해 절전 모드 종료를 체크해 주세요. 작업 스케줄러는 컴퓨터가 켜져 있을 때만 실행되기 때문에 컴퓨터가 절전모드일 수가 있어서 저걸 체크해서 절전모드일 때도 동작하게 해 주세요.

이렇게 하면 컴퓨터만 켜져 있으면 포럼에 자신이 원하는 글을 올리는 매크로가 완성됐습니다!

긴 글 읽어주시고 따라와 주셔서 감사합니다.

반응형