Computer Science/자동화
셀레니움을 이용한 웹툰 감상
netjung
2021. 7. 6. 00:36
셀레니움
자동화란 언제나 설레고, 뿌듯한 작업입니다.
그 중의 하나인 셀레니움을 익히게 되었고, 그로 인해 바로 활용하며 즐길 수 있는 코드를 작성하여 보았습니다.
웹툰감상 자동화
기본적인 프로세스는 다음과 같습니다.
- 좋아하는 웹툰들의 링크를 리스트로 모아두고, 원하는 웹툰 번호를 입력합니다.
- 몇 번째 화를 볼지 선택 합니다.
- 셀레니움 실행 후 해당 웹툰, 해당 화가 실행됩니다.
- 정해진 시간마다 일정하게 스크롤하여 내립니다.
- 맨 밑까지 스크롤 완료 후 다음 화로 가는 버튼을 클릭합니다.
- 4번 5번을 반복합니다.
1,2번까지의 코드, UI로서의 역할
class Webtoon:
def __init__(self, number, name, url):
self.number = number
self.name = name
self.url = url
print(str(number) + ": " + name)
class Nopage(Exception):
pass
print("choose your webtoon to watch automatically")
webtoonList = []
webtoonList.append(Webtoon(1, "웹툰이름", "웹툰링크"))
webtoonList.append(Webtoon(2, "웹툰이름", "웹툰링크"))
webtoonList.append(Webtoon(3, "웹툰이름", "웹툰링크"))
chooseNum = input("choose with number: ")
epNumber = input("what episode you gonna start?")
for n in range(0, len(webtoonList)):
if int(chooseNum) == webtoonList[n].number:
playUrl = webtoonList[n].url
break
웹툰을 클래스화 후 번호입력하는 창을 만들었다.
나머지 실행부분
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get(playUrl)
browser.set_window_position(2100, 0)
browser.maximize_window()
time.sleep(2)
episode = browser.find_elements_by_class_name("웹툰에피소드 클래스")
for n, ep in enumerate(episode[::-1]):
if n == int(epNumber) - 1:
ep.click()
break
while True:
try:
next_page = browser.find_element_by_id("다음화 아이디")
print("page exist")
scroll_size = browser.execute_script("return document.body.scrollHeight")
total_sections = ceil(scroll_size / 900)
for section in range(total_sections + 1):
browser.execute_script(f"window.scrollTo(0,{section*900})")
time.sleep(1.5)
next_page.click()
except:
print("no page")
scroll_size = browser.execute_script("return document.body.scrollHeight")
total_sections = ceil(scroll_size / 900)
for section in range(total_sections + 1):
browser.execute_script(f"window.scrollTo(0,{section*900})")
time.sleep(1.5)
break
browser.quit()
webdriver를 통해 크롬 실행후, 저의 환경에 맞게 창을 오른쪽 모니터로 이동 후 최대화 하는 작업까지 들어있습니다.
에피소드 선택은 맨 밑에서부터 1화라 역순으로 선택하도록 하였습니다.
반복문으로 스크롤 후 다음화 선택을 하도록 하였습니다.
스크롤은 해당 화면의 scrollHeight을 받아와서 적당한 스크롤을 하도록 나누었습니다.
다음화 버튼이 없을경우 오류나서 예외처리로 나누었고, 다음화 없을경우 끝까지 본 후 종료하게 만들었습니다.
여기까지만 해도 매번 스크롤과 다음화 누르는 작업이 사라졌지만, 해당 셀레니움 가상환경에 접속하여 파이썬 파일 실행하는 것 조차 귀찮기때문에, batch 파일을 처음 만들어 보았습니다.
@echo off
call 가상환경경로/activate.bat
cd 파일경로
python webtoon.py
cmd /k
이를 통해 batch파일 누르는 것으로 웹툰감상 자동화 프로그램을 사용할 수 있게 되었습니다.