복붙노트

[PYTHON] 느린 스크립트가있는 전체 페이지로드까지 Selenium을 대기시키지 않으려면 어떻게합니까?

PYTHON

느린 스크립트가있는 전체 페이지로드까지 Selenium을 대기시키지 않으려면 어떻게합니까?

Selenium driver.get (url) 전체 페이지로드까지 기다립니다. 그러나 스크래핑 페이지는 죽은 JS 스크립트를로드하려고 시도합니다. 그래서 제 Python 스크립트는 그것을 기다리고 몇 분 동안 작동하지 않습니다. 이 문제는 사이트의 모든 페이지에있을 수 있습니다.

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.cortinadecor.com/productos/17/estores-enrollables-screen/estores-screen-corti-3000')
# It try load: https://www.cetelem.es/eCommerceCalculadora/resources/js/eCalculadoraCetelemCombo.js 
driver.find_element_by_name('ANCHO').send_keys("100")

대기 시간을 제한하는 방법, 파일의 AJAX로드를 차단하는 방법 또는 다른 방법입니까?

또한 webdriver.Chrome ()에서 스크립트를 테스트하지만 PhantomJS () 또는 Firefox ()를 사용합니다. 따라서 어떤 방법이 브라우저 설정에서 변경 사항을 사용하면 범용 적이어야합니다.

해결법

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

    1.Selenium이 기본적으로 페이지 / URL을로드 할 때 pageLoadStrategy가 normal로 설정된 기본 구성을 따릅니다. Selenium이 전체 페이지로드를 기다리지 않도록 pageLoadStrategy를 구성 할 수 있습니다. pageLoadStrategy는 다음과 같이 3 가지 값을 지원합니다.

    Selenium이 기본적으로 페이지 / URL을로드 할 때 pageLoadStrategy가 normal로 설정된 기본 구성을 따릅니다. Selenium이 전체 페이지로드를 기다리지 않도록 pageLoadStrategy를 구성 할 수 있습니다. pageLoadStrategy는 다음과 같이 3 가지 값을 지원합니다.

    다음은 pageLoadStrategy를 구성하는 코드 블록입니다.

  2. ==============================

    2.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Firefox()
    driver.get("http://somedomain/url_that_delays_loading")
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "myDynamicElement"))
        )
    finally:
        driver.quit()
    

    그래서 해결책은 기다릴 시간을 정하는 것이고, 그 요소가 그 고정 된 기간에 잡히지 않는다면, 예외를 잡아서 사건이나 아무것도 기록하지 않고 마침내 계속 진행할 수 있습니다. 코드 샘플은 여기에서 가져 왔습니다.

  3. from https://stackoverflow.com/questions/44770796/how-to-make-selenium-not-wait-till-full-page-load-which-has-a-slow-script by cc-by-sa and MIT license