먹고 기도하고 코딩하라

python3 selenium 자바스크립트 함수 작동시켜서 웹크롤링하기 본문

개발일지

python3 selenium 자바스크립트 함수 작동시켜서 웹크롤링하기

사과먹는사람 2020. 3. 8. 18:37
728x90
728x90

 

우리 학교 학식 홈페이지 같은 경우 일요일이면 자동으로 돌아오는 주 식단이 나오게 되어 있습니다.

하지만 가끔은 금요일이나 토요일에 미리 다음주 식단을 긁어와야 할 때가 있는 법입니다. (일요일에 놀러가려면)

근데 짜놓은 코드에는 다음 주 식단을 볼 수 있는 코드가 없습니다.

 

 

날짜 옆의 '다음'을 눌러야 다음 주 식단이 나올 텐데 어떻게 해야 할까요? 일단 '다음'을 누를 때 어떤 일이 일어나는지부터 확인해봐야겠습니다. 

크롬 브라우저를 켜고 개발자 도구를 엽니다. '다음'을 검색합니다.

 

 

보아하니 클릭했을 때 'nextWeekday()'라는 함수가 실행되고 그러면 다음 주로 넘어가는 모양입니다. 내친김에 nextWeekday() 함수가 어떻게 생겼는지도 보겠습니다.

 

 

getWeekday 를 해서 현재 날짜에서 7일을 더하고 setPeriod 함수를 실행하는 식입니다. 이 setPeriod 에서는 또 getSchedules 함수를 실행합니다. getSchedules 함수는 아래 있긴 한데 어쨌든 지금은 nextWeekday 가 실행되어야 다음 주 식단 페이지로 넘어간다는 정보 하나만 있으면 됩니다.

이제 함수를 찾았으니 코드로 넘어가봅시다. 제가 짜둔 코드를 베이스로 합니다. 현재 식단을 크롤링하는 코드에서 url 로 드라이버를 여는 함수는 다음과 같은데요.

 

def get_html(driver, url):
    driver.get(url)
    # driver.execute_script('nextWeekday(1)')
    driver.implicitly_wait(5)
    sleep(3)

    html = driver.page_source
    return html

 

여기서 url 을 연 다음에 주석 처리된 문장을 주석 해제하여 작성해주기만 하면 됩니다. execute_script 는 매개변수 안의 함수를 실행해주는 메소드입니다. 우리가 찾은 함수는 nextWeekday 이니 execute_script 안에 넣어주면 되죠.

결과를 한 번 확인해 보겠습니다. 저는 원래 있던 scrapy_page.py 파일을 복사하여 scrapy_next_page.py 로 이름을 바꿔주고 저 한 문장만 끼워 넣어서 실행해보겠습니다.

 

 

week_info.txt 를 확인해 보니 다음 주 날짜로 잘 나오는 모습입니다. ^^

 

 

728x90
반응형
Comments