편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2021.02.17

    파이썬 스크롤 스크린샷 기능 질문드립니다.


    안녕하세요.

    파이썬 공부중인 입문자 입니다. 크롤링 연습을 하던중 스크롤 하면서 주기적으로 스크린샷을 하는 기본적인 구성 프로그램을 작성중입니다.

    프로그램 동작 순서는 하기와 같습니다..

    네이버 사이트 접속 -> 다음 검색 -> 다음 사이트 페이지 한번 내릴때 마다 스크린샷 찍기 -> 다시 페이지 올림 -> 반복 -> 종료시 screendata 폴더에 스크린샷 기록

    스크롤 페이지 Up/Down 모두 정상동작 됩니다만 문제는 스크롤 한번 하고 사진을 찍고

    다시 스크롤 한번하고 다시찍는 이런 로직인데 계속 같은곳만 찍는 현상이 발생하여

    디버깅을 계속하다 선배님들에게 도움을 구하고자 이렇게 질문드립니다.

    아래는 소스코드 입니다.

    선배님들 답변 부탁드립니다.. 감사합니다

    
    
    
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from PIL import ImageGrab
    import time
    import pyautogui
    
    
    
    
    driver = webdriver.Chrome("./chromedriver")
    driver.get("https://www.naver.com/")
    driver.find_element_by_name("query").send_keys("다음")
    time.sleep(2)
    driver.find_element_by_name("query").send_keys(Keys.ENTER)
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="main_pack"]/div[2]/ul/li/dl/dt/a').click()
    time.sleep(5)
    driver.refresh()
    time.sleep(1)
    driver.close()
    
    
    
    # for i in range(1,6):
    #     driver.get_screenshot_as_file("screendata/daum{}.png".format(i))
    #     #스크롤 기능 적산 값이 아니라 계속 포인트를 지정해줘야 내려감
    #     #1000만큼 내려서 1000만큼 더내리고 싶으면 0,2000 을 해줘야됨
    #     driver.execute_script("window.scrollTo(0,{}000)".format(i))
    #     time.sleep(3)
    #     i += 1
    
    
    img = ImageGrab.grab()
    
    
    for i in range(1,5):
        time.sleep(1)
        screendata = ('screendata/screenshot0{}.png'.format(i))
        pyautogui.press("pagedown")
        time.sleep(2)
        img.save(screendata)
        time.sleep(2)
        pyautogui.press("pagedown")
        time.sleep(1)
        screendata2 = ('screendata/screenshot00{}.png'.format(i))
        img.save(screendata2)
        time.sleep(1)
        pyautogui.press("pageup")
        pyautogui.press("pageup")
        i += 1
    
    
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.03.12

    파이썬 스크롤 스크린샷 기능 질문드립니다.


    안녕하세요.

    파이썬 공부중인 입문자 입니다. 크롤링 연습을 하던중 스크롤 하면서 주기적으로 스크린샷을 하는 기본적인 구성 프로그램을 작성중입니다.

    프로그램 동작 순서는 하기와 같습니다..

    네이버 사이트 접속 -> 다음 검색 -> 다음 사이트 페이지 한번 내릴때 마다 스크린샷 찍기 -> 다시 페이지 올림 -> 반복 -> 종료시 screendata 폴더에 스크린샷 기록

    스크롤 페이지 Up/Down 모두 정상동작 됩니다만 문제는 스크롤 한번 하고 사진을 찍고

    다시 스크롤 한번하고 다시찍는 이런 로직인데 계속 같은곳만 찍는 현상이 발생하여

    디버깅을 계속하다 선배님들에게 도움을 구하고자 이렇게 질문드립니다.

    아래는 소스코드 입니다..

    선배님들 답변 부탁드립니다.. 감사합니다 (파이참으로 작성하였습니다.)

    
    
    
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from PIL import ImageGrab
    import time
    import pyautogui
    
    
    
    
    driver = webdriver.Chrome("./chromedriver")
    driver.get("https://www.naver.com/")
    driver.find_element_by_name("query").send_keys("다음")
    time.sleep(2)
    driver.find_element_by_name("query").send_keys(Keys.ENTER)
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="main_pack"]/div[2]/ul/li/dl/dt/a').click()
    time.sleep(5)
    driver.refresh()
    time.sleep(1)
    driver.close()
    
    
    
    # for i in range(1,6):
    #     driver.get_screenshot_as_file("screendata/daum{}.png".format(i))
    #     #스크롤 기능 적산 값이 아니라 계속 포인트를 지정해줘야 내려감
    #     #1000만큼 내려서 1000만큼 더내리고 싶으면 0,2000 을 해줘야됨
    #     driver.execute_script("window.scrollTo(0,{}000)".format(i))
    #     time.sleep(3)
    #     i += 1
    
    
    img = ImageGrab.grab()
    
    
    for i in range(1,5):
        time.sleep(1)
        screendata = ('screendata/screenshot0{}.png'.format(i))
        pyautogui.press("pagedown")
        time.sleep(2)
        img.save(screendata)
        time.sleep(2)
        pyautogui.press("pagedown")
        time.sleep(1)
        screendata2 = ('screendata/screenshot00{}.png'.format(i))
        img.save(screendata2)
        time.sleep(1)
        pyautogui.press("pageup")
        pyautogui.press("pageup")
        i += 1