Python selenium 의 이 세 가지 대기 방식 은 반드시!
자동화 테스트 스 크 립 트 가 실행 되 는 과정 에서 webdriver 가 브 라 우 저 를 조작 할 때 요소 의 포 지 셔 닝 에 시간 을 초과 합 니 다.
시간
이 시간 내 에 요 소 를 찾 지 못 하면 이상 을 던 져 스 크 립 트 실행 을 중단 합 니 다.
웹 지연 이나 브 라 우 저 카드 로 인 한 우연 한 실 패 를 피 하려 면 스 크 립 트 에 대기 모드 를 설정 할 수 있 습 니 다.
2.자주 사용 하 는 세 가지 대기 방식
강제 대기
암시 적 기다 림
기다 림 을 표시 합 니 다3.강제 대기
time 모듈 의 sleep 방법 을 이용 하여 가장 간단 하고 거 친 대기 방법 을 실현 합 니 다.
브 라 우 저 를 불 러 오 든 말 든 3 초,3 초 를 기 다 려 야 합 니 다.다음 코드 를 계속 실행 하 십시오.
# -*- coding: utf-8 -*-
# @Author :
import time
from selenium import webdriver
driver = webdriver.Chrome()
#
driver.get(r'https://www.baidu.com/')
# 3
time.sleep(3)
driver.find_element_by_css_selector("#kw").send_keys("selenium")
#
driver.quit()
폐단이러한 대기 방법 을 사용 하 는 것 을 권장 하지 않 습 니 다.코드 의 실행 속도 에 심각 한 영향 을 줍 니 다.
4.암시 적 대기
implicitly_wait()방법 은 페이지 로 딩 이 완료 되 기 를 기다 리 는 데 사 용 됩 니 다.
완료 하면 다음 단계 실행
암시 적 기다 림 은 한 번 만 설명 하고 브 라 우 저 를 열 면 설명 합 니 다.
성명 후 전체 drvier 의 생명 주기 에 효과 가 있 으 며,이후 에는 중복 성명 을 하지 않 아 도 됩 니 다.
# -*- coding: utf-8 -*-
# @Author :
import time
from selenium import webdriver
driver = webdriver.Chrome()
#
driver.get(r'https://www.baidu.com/')
# 5
driver.implicitly_wait(5)
driver.find_element_by_css_selector("#kw").send_keys("selenium")
#
driver.quit()
폐단프로그램 은 시간 이 초 과 될 때 까지 모든 페이지 를 불 러 올 때 까지 기다 릴 것 입 니 다.
때때로 내 가 필요 로 하 는 그 요 소 는 이미 불 러 오 는 것 이 완성 되 었 다.단지 페이지 에 다른 요소 가 불 러 오 는 것 이 매우 느 릴 뿐이다.나 는 여전히 페이지 를 기 다 려 야 한다.
면 을 모두 불 러 와 야 다음 단 계 를 실행 할 수 있 습 니 다.
5.대기 시간 표시
WebDriverWait,이러한 종류의 until()과 untilnot()방법 은 판단 조건 에 따라 유연 하 게 기다 릴 수 있 습 니 다.
프로그램 이 xx 초 마다 한 번 씩 보고 조건 이 성립 되면 다음 단 계 를 실행 한 다 는 뜻 이다.
그렇지 않 으 면 설정 한 시간 을 초과 할 때 까지 기 다 렸 다가 TimeoutException 을 던 집 니 다.
대기 시간 을 표시 하려 면 모든 대기 요소 앞에서 설명 해 야 합 니 다.
#
from selenium.webdriver.support.wait import WebDriverWait
네 개의 매개 변수driver:브 라 우 저 드라이버
timeout:대기 시간
poll_frequency:검 측 간격,기본 0.5s
ignored_exceptions:시간 초과 후의 이상 정보,기본 값 NoSuchElement Exception
expected_conditions
expected_conditions 는 selenium 의 모듈 입 니 다.
판단 에 사용 할 수 있 는 일련의 조건 을 포함 하고 있다.
웹 페이지 에 요소 가 존재 하 는 지,클릭 할 수 있 는 지 등 을 판단 할 수 있 으 며,일반적으로 단언 이나 WebDriverWait 와 함께 사용 합 니 다.
from selenium.webdriver.support import expected_conditions as EC
# -*- coding: utf-8 -*-
# @Author :
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 10s, , , 10s
# , locator, (By.ID, ‘kw')
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID,
"kw"))).send_keys(" ")
6.모듈 용법 집합
# title ,
WebDriverWait(driver,10).until(EC.title_is(" , "))
# title ,
WebDriverWait(driver,10).until(EC.title_contains('new'))
# url ,
WebDriverWait(driver,10).until(EC.url_contains('https://www.baidu.com'))
# url ,
WebDriverWait(driver,10).until(EC.url_contains('baidu'))
# url ,
WebDriverWait(driver,10).until(EC.url_matches('.+baidu.+'))
# , ,
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
# ,
WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(By.ID,'kw'))
)
# ,
WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.NAME,'tj_trn
ews'),' '))
# frame switch , , True switch
WebDriverWait(driver,10,).until(EC.frame_to_be_available_and_switch_to_it(By.xpa
th,'//iframe'))
# , , False
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME,'tj_trnews'))
)
# ,
WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.
xpath,'//input[@type="checkbox"]')))
# alert, alert alert
WebDriverWait(driver,10).until(EC.alert_is_present())
파 이 썬 셀 레 니 엄 에 관 한 이 세 가지 대기 방식 은 반드시!의 글 은 여기까지 소개 되 었 습 니 다.더 많은 selenium 대기 방식 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WDM(WebDriverManager) 시작하기자동화 테스트(브라우저 자동화)에 대해 이야기할 때마다 몇 가지 사항이 있어야 합니다. 브라우저(시스템 경로에 있어야 함). 드라이버 실행 파일(시스템 경로에 있어야 함), 드라이버 실행 파일 버전은 브라우저 버전과...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.