복붙노트

[PYTHON] 파이썬에서 selenium webdriver를 사용하여 웹 페이지를 스크롤하는 방법은 무엇입니까?

PYTHON

파이썬에서 selenium webdriver를 사용하여 웹 페이지를 스크롤하는 방법은 무엇입니까?

현재 페이스 북 사용자 친구 페이지를 통해 구문 분석하고 AJAX 스크립트에서 모든 ID를 추출하기 위해 셀레늄 webdriver를 사용하고 있습니다. 하지만 모든 친구를 사귈 때까지 아래로 스크롤해야합니다. 셀레늄에서 어떻게 아래로 스크롤 할 수 있습니까? 파이썬을 사용하고 있습니다.

해결법

  1. ==============================

    1.당신이 사용할 수있는

    당신이 사용할 수있는

    driver.execute_script("window.scrollTo(0, Y)") 
    

    여기서 Y는 높이입니다 (fullhd 모니터에서는 1080입니다). (@lukeis에 감사드립니다)

    당신은 또한 사용할 수 있습니다

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    

    페이지 하단으로 스크롤합니다.

    소셜 네트워크와 페이스 북 등 무한로드가있는 페이지로 스크롤하고 싶다면 (@Cuong Tran 덕분에)

    SCROLL_PAUSE_TIME = 0.5
    
    # Get scroll height
    last_height = driver.execute_script("return document.body.scrollHeight")
    
    while True:
        # Scroll down to bottom
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
        # Wait to load page
        time.sleep(SCROLL_PAUSE_TIME)
    
        # Calculate new scroll height and compare with last scroll height
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    
  2. ==============================

    2.linkedin.com과 같은 무한한 페이지의 맨 아래로 스크롤하려는 경우 다음 코드를 사용할 수 있습니다.

    linkedin.com과 같은 무한한 페이지의 맨 아래로 스크롤하려는 경우 다음 코드를 사용할 수 있습니다.

    SCROLL_PAUSE_TIME = 0.5
    
    # Get scroll height
    last_height = driver.execute_script("return document.body.scrollHeight")
    
    while True:
        # Scroll down to bottom
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
        # Wait to load page
        time.sleep(SCROLL_PAUSE_TIME)
    
        # Calculate new scroll height and compare with last scroll height
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    

    참조 : https://stackoverflow.com/a/28928684/1316860

  3. ==============================

    3.여기에 표시된 것과 같은 방법 :

    여기에 표시된 것과 같은 방법 :

    파이썬에서는 그냥 사용할 수 있습니다.

    driver.execute_script("window.scrollTo(0, Y)")
    

    (Y는 스크롤하려는 수직 위치입니다)

  4. ==============================

    4.

    element=find_element_by_xpath("xpath of the li you are trying to access")
    
    element.location_once_scrolled_into_view
    

    이것은 내가 볼 수없는 'li'에 액세스하려고 할 때 도움이되었습니다.

  5. ==============================

    5.페이스 북의 검색 결과 페이지를 스크롤하는 것에 대한 답변이 아니었지만 적어도이 솔루션을 테스트 한 후에 발견되었습니다.

    페이스 북의 검색 결과 페이지를 스크롤하는 것에 대한 답변이 아니었지만 적어도이 솔루션을 테스트 한 후에 발견되었습니다.

    while driver.find_element_by_tag_name('div'):
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        Divs=driver.find_element_by_tag_name('div').text
        if 'End of Results' in Divs:
            print 'end'
            break
        else:
            continue
    
  6. ==============================

    6.

    from selenium.webdriver.common.keys import Keys
    html = browser.find_element_by_tag_name('html')
    html.send_keys(Keys.END)
    

    테스트를 거쳤습니다.

  7. ==============================

    7.이 문제를 해결하는 가장 쉬운 방법은 라벨을 선택한 다음 보내기를하는 것입니다.

    이 문제를 해결하는 가장 쉬운 방법은 라벨을 선택한 다음 보내기를하는 것입니다.

    label.sendKeys(Keys.PAGE_DOWN);
    

    희망 그것이 작동합니다!

  8. ==============================

    8.나는 동적 인 웹 페이지를 스크롤하는 방법을 찾고 있었고 페이지의 끝 부분에 도달하면 자동으로 멈추고이 스레드를 발견했다.

    나는 동적 인 웹 페이지를 스크롤하는 방법을 찾고 있었고 페이지의 끝 부분에 도달하면 자동으로 멈추고이 스레드를 발견했다.

    한 가지 주요 수정 사항이있는 @Cuong Tran의 게시물이 내가 찾던 해답이었습니다. 나는 다른 사람들이 수정이 도움이된다는 것을 알았을 것이라고 생각했다. (코드가 작동하는 방식에 큰 영향을 미친다.

    수정은 루프 내에서 마지막 페이지 높이를 캡처하는 문을 이동하여 각 검사가 이전 페이지 높이와 비교되도록합니다.

    그래서, 아래의 코드는 :

    (break 문이 다른 조건 (페이지가 'sticks'인 경우)에서 제거 될 수있는 또 다른 수정이 있습니다.

        SCROLL_PAUSE_TIME = 0.5
    
    
        while True:
    
            # Get scroll height
            ### This is the difference. Moving this *inside* the loop
            ### means that it checks if scrollTo is still scrolling 
            last_height = driver.execute_script("return document.body.scrollHeight")
    
            # Scroll down to bottom
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
            # Wait to load page
            time.sleep(SCROLL_PAUSE_TIME)
    
            # Calculate new scroll height and compare with last scroll height
            new_height = driver.execute_script("return document.body.scrollHeight")
            if new_height == last_height:
    
                # try again (can be removed)
                driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
                # Wait to load page
                time.sleep(SCROLL_PAUSE_TIME)
    
                # Calculate new scroll height and compare with last scroll height
                new_height = driver.execute_script("return document.body.scrollHeight")
    
                # check if the page height has remained the same
                if new_height == last_height:
                    # if so, you are done
                    break
                # if not, move on to the next loop
                else:
                    last_height = new_height
                    continue
    
  9. ==============================

    9.내 목적을 위해, 나는 윈도우를 염두에 두면서 더 아래로 스크롤하고 싶었다. 내 솔루션은 비슷했고 window.scrollY를 사용했다.

    내 목적을 위해, 나는 윈도우를 염두에 두면서 더 아래로 스크롤하고 싶었다. 내 솔루션은 비슷했고 window.scrollY를 사용했다.

    driver.execute_script("window.scrollTo(0, window.scrollY + 200)")
    

    현재 y 스크롤 위치 + 200으로 이동합니다.

  10. from https://stackoverflow.com/questions/20986631/how-can-i-scroll-a-web-page-using-selenium-webdriver-in-python by cc-by-sa and MIT license