Python의 selenium 라이브러리 사용법 상세 설명

9732 단어 Pythonselenium
selenium은 주로 자동화 테스트를 하고 다양한 브라우저를 지원하며 파충류에서는 자바스크립트 렌더링 문제를 해결하는 데 사용된다.
아날로그 브라우저가 웹 페이지를 불러옵니다. requests, urllib가 웹 내용을 정상적으로 가져올 수 없을 때

1. 브라우저 객체 선언


주의점 하나, Python 파일 이름이나 패키지 이름은 selenium로 명명하지 마십시오. 가져올 수 없습니다.

from selenium import webdriver
#webdriver , webdriver, , Chrome 
browser = webdriver.Chrome()

2. 웹 페이지를 방문하고 웹 페이지 html 얻기


from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
print(browser.page_source)#browser.page_source html
browser.close()

3. 요소 찾기


단일 요소

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element_by_id('q')
input_second = browser.find_element_by_css_selector('#q')
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first,input_second,input_third)
browser.close()
자주 사용하는 검색 방법
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
통용되는 방법을 사용할 수도 있다

from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element(BY.ID,'q')# , 
print(input_first)
browser.close()
여러 요소,elements 여러 s

input_first = browser.find_elements_by_id('q')

4. 요소 상호작용 - 검색 상자에 키워드를 입력하여 자동 검색


from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')# 
input.send_keys('iPhone')# 
time.sleep(5)
input.clear()# 
input.send_keys(' ')
button = browser.find_element_by_class_name('btn-search')# 
button.click()
추가 작업:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement#속성, 캡처 등이 있습니다.

5. 상호작용, 브라우저를 구동하여 동작을 하고 드래그 동작을 시뮬레이션하여 동작을 동작 체인에 추가하여 직렬로 실행한다


from selenium import webdriver
from selenium.webdriver import ActionChains# 
browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')# iframeResult 
source = browser.find_element_by_css_selector('#draggable')# 
target = browser.find_element_by_css_selector('#droppable')# 
actions = ActionChains(browser)# actions 
actions.drag_and_drop(source, target)
actions.perform()# 
추가 작업:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

6. JavaScript 실행


일부 동작은api를 제공하지 않을 수도 있습니다. 예를 들어 진도표 밑에 있는 동작은 코드를 통해 자바스크립트를 실행할 수 있습니다.

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.jb51.net/explore')
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')

7. 요소 정보 얻기


속성 가져오기

from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
logo = browser.find_element_by_id('zh-top-link-logo')# logo
print(logo)
print(logo.get_attribute('class'))
browser.close()
텍스트 값 가져오기

from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.text)#input.text 
browser.close()

#  Id, , , 
from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.id)# id
print(input.location)# 
print(input.tag_name)# 
print(input.size)# 
browser.close()

8. Frame 작업


프레임은 독립된 웹 페이지에 해당합니다. 만약에 부류망 프레임에서 하위 클래스를 찾으면 하위 클래스로 전환해야 합니다. 하위 클래스는 하위 클래스를 찾으려면 먼저 전환해야 합니다.

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
print(source)
try:
    logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
    print('NO LOGO')
browser.switch_to.parent_frame()
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)

기다리다


암시적 대기
스텔스 대기를 사용하여 테스트를 실행할 때 WebDriver가 DOM에서 요소를 찾지 못하면 계속 대기하고 설정 시간을 초과하면 요소를 찾을 수 없는 이상을 던집니다.
즉, 요소나 요소가 즉시 나타나지 않을 때 암시적 대기는 DOM을 찾기 위해 일정 시간을 기다립니다. 기본 시간은 0입니다.

from selenium import webdriver
browser = webdriver.Chrome()
browser.implicitly_wait(10)# ,10 
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)
명시적 대기
대기 조건과 최장 대기 시간을 지정하면 프로그램은 대기 시간 내에 조건이 충족되었는지 여부를 판단하고, 충족되면 되돌아오고, 만족스럽지 않으면 계속 기다리고, 시간이 지나면 이상을 던진다.

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
browser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(input, button)
title_is 제목은 어떤 내용입니다.
title_contains 제목에 내용 포함
presence_of_element_located 요소가 로드되고 위치 지정 메타그룹에 전달됩니다. 예를 들어(By.ID,'p')
visibility_of_element_located 요소 보이기, 포지셔닝 모듈 전송
visibility_of 보기, 원소 대상 전송
presence_of_all_elements_located 모든 요소 불러오기
text_to_be_present_in_요소 텍스트에 텍스트 포함
text_to_be_present_in_element_value 요소 값에 텍스트 포함
frame_to_be_available_and_switch_to_it 프레임 불러오기 및 전환
invisibility_of_element_located 요소가 보이지 않습니다.
element_to_be_클릭 가능 요소 클릭 가능
staleness_of 요소가 DOM에 있는지 여부를 판단하고 페이지가 새로 고침되었는지 판단합니다.
element_to_be_selected 요소 선택 가능, 전송 요소 대상
element_located_to_be_selected 요소 선택 가능, 포지셔닝 모듈 전송
element_selection_state_to_be 전송 요소 개체 및 상태는 True 로 반환됩니다. 그렇지 않으면 False 로 반환됩니다.
element_located_selection_state_to_be 전송 위치 메타그룹 및 상태, 동일하게 True 반환, 그렇지 않으면 False 반환
alert_is_present Alert 표시 여부
자세한 내용:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

11. 전진 후퇴 - 브라우저의 전진 후퇴를 실현하여 다른 웹 페이지를 조회합니다


import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.python.org/')
browser.back()
time.sleep(1)
browser.forward()
browser.close()

12. Cookies


from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies())
browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
탭 관리 브라우저 창 추가

import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get('http://www.fishc.com')
13. 이상 처리

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.find_element_by_id('hello')
from selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException
browser = webdriver.Chrome()
try:
    browser.get('https://www.baidu.com')
except TimeoutException:
    print('Time Out')
try:
    browser.find_element_by_id('hello')
except NoSuchElementException:
    print('No Element')
finally:
    browser.close()
# 세부 정보:http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions
Python의 selenium 라이브러리 사용법에 대한 자세한 내용은 아래의 링크를 보십시오

좋은 웹페이지 즐겨찾기