셀레늄 소개 및 기본 사용법

Selenium은 웹 브라우저를 잘 지원하는 간단하고 유연한 무료 오픈 소스 자동화 테스트 도구입니다. UI 자동화, 크롤러 및 기타 시나리오에서 매우 실용적입니다. Selenium 도구를 능숙하게 익히고 사용할 수 있으면 효율성이 크게 향상될 수 있습니다.

셀레늄 소개

Selenium은 자동화된 테스트를 구현하기 위해 다중 플랫폼, 다중 브라우저 및 다중 언어를 지원하며 병렬 테스트 실행을 지원하여 시간을 단축하고 테스트 효율성을 향상시키는 오픈 소스 및 이식 가능한 웹 테스트 프레임워크입니다. 이를 사용하여 마우스 클릭 시뮬레이션, 키보드 입력 시뮬레이션 등과 같이 프로그램이 브라우저에서 인간과 똑같이 웹 인터페이스를 작동할 수 있도록 관련 자동화 프로그램을 작성할 수 있습니다. 웹 인터페이스를 작동할 수 있을 뿐만 아니라 웹에서 정보를 얻을 수도 있습니다. 상대적으로 말하면 Selenium을 사용하여 정보를 얻는 것이 더 쉽습니다. 기본 원칙은 자동화 프로그램을 작성한 후 브라우저 드라이버를 사용하여 브라우저를 직접 조작하여 사용자가 브라우저에서 얻을 수 있는 정보는 Selenium을 이용하여 얻을 수 있습니다.

환경 준비

브라우저 드라이버를 다운로드합니다. 드라이버 버전은 브라우저 버전과 일치해야 합니다.

환경 변수 경로에 브라우저 드라이버 경로를 추가합니다.

Selenium 패키지 설치 pip install selenium

빠른 시작

셀레늄을 사용하여 브라우저를 제어하여 Baidu 홈페이지를 열고 Alipay를 검색하세요.

from selenium import webdriver # 웹 드라이버 가져오기 가져
오기 시간
드라이버 = webdriver.Chrome() # 브라우저 드라이버 가져오기
드라이버.get(" http://www.baidu.com ") # 바이두 홈페이지 열기
input_box = 드라이버.find_element_by_id('kw' ) # 홈 페이지 입력 상자 요소 가져오기
input_box.send_keys('Alipay') # 입력 상자에 내용을 입력
search_button = 드라이버.find_element_by_id('su') # 홈 페이지 검색 버튼 요소 가져오기
search_button.click() # 검색 버튼
time.sleep (5)
drivers.quit() # 드라이버를 닫습니다

Selenium-API 운영 [문서 끝 부분에 Selenium 자동화 테스트 학습 리소스 무료 공유]

요소 대기

잠깐 보여줘

타임아웃을 설정하고, 해당 요소가 존재하는지 매번 확인하고, 존재할 경우 후속 컨텐츠를 실행하며, 최대 시간(timeout)을 초과하면 타임아웃 예외(TimeoutException)가 발생한다. 대기 중을 표시하려면 Until 또는 Not Until과 함께 WebDriverWait를 사용해야 합니다.

셀레늄 가져오기 웹 드라이버에서

selenium.webdriver.support.ui에서 WebDriverWait 가져오기

selenium.webdriver.support에서 예상_조건 가져오기

selenium.webdriver.common.by에서 가져오기

드라이버 = webdriver.Chrome()

드라이버.get(' http://www.baidu.com ')

# 0.5초마다 해당 요소가 존재하는지 확인하고, 5초 이내에 요소가 발견되지 않으면 예외가 발생합니다.

요소 = WebDriverWait(드라이버, 5, 0.5).until(

Expect_conditions.presence_of_element_ located((By.ID, 'kd')), message='요소를 찾을 수 없습니다')

암시적 대기

암시적 대기는 시간 제한도 지정합니다. 지정된 요소가 이 시간 이후에 로드되지 않으면 NoSuchElementException 예외가 발생합니다. 발생하는 다양한 예외 외에도 또 다른 점이 있습니다. 암시적 대기는 전역적입니다. 즉, 실행 중인 프로세스 중에 요소를 찾을 수 있으면 실행 중인 코드에 영향을 미치지 않지만 찾을 수 없으면 요소를 찾을 수 없습니다. poll 메소드는 요소를 찾을 때까지 해당 요소에 지속적으로 접근하며, 지정된 시간을 초과하면 예외가 발생합니다. 암시적 대기를 구현하려면 implicitly_wait()를 사용하세요. 이는 명시적 대기보다 사용하기 훨씬 쉽습니다.

드라이버.암시적_대기(5)

강제 대기

강제로 대기하려면 time.sleep()을 사용하고, 고정된 절전 시간을 설정하고, 요소가 로드될 때까지 기다립니다. 이는 코드 실행 효율성에 영향을 미칩니다.

요소 위치 지정

Selenium은 id, 이름, 클래스 이름, 태그 이름, 링크 텍스트, 부분 링크 텍스트, xpath, css 선택기 등 8가지 기본 요소 위치 지정 방법을 제공합니다. 여기서 id, 이름, 클래스 이름, 태그 이름은 요소의 태그를 기반으로 합니다. 위치 지정을 위한 요소의 속성, 링크 텍스트, 부분 링크 텍스트는 하이퍼링크 텍스트에 따라 위치 지정됩니다. xpath는 요소 경로 위치 지정, css는 선택기 위치 지정(스타일 위치 지정)입니다.

element = drivers.find_element_by_id('kw') # id 속성을 통해 요소를 가져옵니다.

element = drivers.find_element_by_name('wd') # name 속성을 통해 요소를 가져옵니다.

element = drivers.find_element_by_class_name('input') # 클래스 속성을 통해 요소를 가져옵니다.

element = drivers.find_element_by_tag_name('input') # 태그 이름으로 요소를 가져옵니다.

element = drivers.find_element_by_link_text('Video') # 링크 텍스트 값을 통해 요소를 가져옵니다.

element =driver.find_element_by_partial_link_text('view')# 부분 링크 텍스트 값을 통해 요소를 가져옵니다.

element = drivers.find_element_by_xpath("//*[@id='kw']") # Xpath를 통해 요소 가져오기

element = drivers.find_element_by_css_selector('#kw') # CSS 선택기를 통해 요소 가져오기

요소 작업

요소를 찾고 요소 개체를 얻은 후 요소에 대해 원하는 작업을 수행할 수 있습니다. Selenium은 요소를 작동할 수 있는 많은 API를 제공합니다. 일반적인 작업에는 클릭, 입력, 지우기, 요소 좌표 값 가져오기, 요소 너비 및 너비 가져오기가 포함됩니다. 높이, 값, 요소속성값, 해당 요소가 선택되었는지 확인합니다.

elemnet.click() # 요소 클릭

element.send_keys('Wuhan') #내용 입력

element.clear() # 내용 지우기

element.location.get('x') # 요소의 왼쪽 상단 모서리의 X축 좌표를 가져옵니다.

element.location.get('y') # 요소의 왼쪽 상단 모서리의 Y축 좌표를 가져옵니다.

element.size.get('width') # 요소 너비를 가져옵니다.

element.size.get('height') # 요소의 높이를 가져옵니다.

element.is_selected() # 요소가 선택되었는지 여부

마우스 조작

일반적인 마우스 작업에는 클릭, 마우스 오른쪽 버튼 클릭, 두 번 클릭, 호버, 드래그 등이 포함됩니다. Selenium은 이러한 마우스 작업에 해당하는 작업 방법을 캡슐화합니다.

Selenium에서는 마우스를 조작하는 메소드가 ActionChains 클래스에 캡슐화되어 있으며, ActionChains 클래스에서 제공하는 모든 마우스 이벤트 메소드가 호출되면 모든 동작이 ActionChains 객체에 저장되고, Perform() 메소드는 실제로 모든 마우스 이벤트 메소드를 실행하게 됩니다. 이벤트.

selenium.webdriver.common.action_chains에서 import ActionChains # 导包

actionChains = ActionChains(driver) # ActionChains 객체 인스턴스화

actionChains.move_to_element(element).perform() # 마우스오버

actionChains.drag_and_drop(elementA, elementB).perform() # 마우스 드래그

actionChains.context_click(element).perform() # 마우스 오른쪽 버튼 클릭

actionChains.double_click(element).perform() # 마우스 더블 클릭

키보드 조작

Selenium은 Keys 클래스의 키보드 키를 캡슐화하여 키보드의 일부 키 또는 키 조합의 입력을 시뮬레이션합니다. send_Keys+ http://Keys.XXX를 사용하여 Ctrl+C, Ctrl+V와 같은 키보드 키 조합을 구현합니다.

selenium.webdriver.common.keys에서 import Keys # 导包

element.send_keys(Keys.BACK_SPACE) # 백스페이스 키 누르기 시뮬레이션

element.send_keys(Keys.Control, 'a') # Ctrl+A 누르기 시뮬레이션

element.send_keys(Keys.Control, 'x') # Ctrl+X 누르기 시뮬레이션

element.send_keys(Keys.Control, 'v') # Ctrl+V 누르기 시뮬레이션

브라우저 작업

Selenium은 또한 브라우저 작업을 위한 해당 API를 제공합니다. 일반적으로 사용되는 API에는 브라우저 창 최대화, 브라우저 창 크기 설정, 브라우저 위치 설정, 브라우저 앞뒤 제어, 페이지 새로 고침 등이 있습니다.

drivers.maximize_window() # 브라우저 창을 최대화합니다

drivers.set_window_size(800, 800) # 브라우저 창의 너비는 800이고 높이는 800입니다.

driver.set_window_ect(300, 0) # 브라우저 위치 (300,0)

drivers.back() # 브라우저가 백업됩니다.

driver.forward() # 브라우저 전달

driver.refresh() # 페이지 새로 고침

기타 작업

북마크 페이지

drivers.get_screenshot_as_file('./baidu.png') # 페이지 스크린샷

Driver.close() # 현재 탭 페이지를 닫습니다.

Driver.quit() # 모든 탭을 닫습니다.

페이지의 링크를 클릭하면 새 탭이 열리는데, 이때 Selenium은 새 탭의 요소를 찾을 수 없습니다. 여기에는 핸들 개념이 포함됩니다. 핸들은 탭 페이지 개체의 고유 식별자입니다. 각 탭 페이지에는 자체 핸들이 있습니다. 핸들을 사용하여 탭 페이지를 전환하여 해당 탭 페이지의 요소를 찾을 수 있습니다.

핸들 = 드라이버.window_handles # 모든 탭 페이지의 핸들을 가져옵니다

driver.switch_to.window(handles[1]) # 지정된 핸들 탭 페이지로 전환

시작 매개변수

Chrome Options는 Chrome 시작 속성을 구성하는 클래스로, 이 매개변수를 통해 Chrome에 시작 매개변수를 추가할 수 있습니다.

크롬 바이너리 파일 위치 설정(binary_location)

시작 매개변수 추가(add_argument)

확장 프로그램 추가(add_extension, add_encoded_extension)

실험 설정 매개변수 추가(add_experimental_option)

디버거 주소 설정(debugger_address)

Chrome 옵션의 일반적으로 사용되는 동작은 다음과 같습니다.

이미지 및 비디오 로딩 비활성화: 웹 페이지 로딩 속도를 향상시킵니다.

프록시 추가: FQ가 특정 페이지에 액세스하거나 IP 액세스 빈도 제한에 대처하는 데 사용되는 크롤링 방지 기술입니다.

모바일 헤더 사용: 모바일 사이트를 방문하세요. 일반적으로 이러한 사이트의 크롤링 방지 기술은 상대적으로 약합니다.

확장 기능 추가: 브라우저를 정상적으로 사용하는 것과 같은 기능을 합니다.

인코딩 설정: 중국어 웹사이트를 처리하고 문자 깨짐을 방지합니다.

JavaScript 실행 방지

UI 자동화에서 브라우저를 열기 전에 브라우저를 구성하는 옵션을 추가할 수 있으며, 다양한 매개변수를 설정하여 브라우저의 기본 동작을 수정할 수 있습니다.

셀레늄 가져오기 웹 드라이버에서

options = webdriver.ChromeOptions() # 시작 매개변수 개체를 인스턴스화합니다.

options.add_argument('--headless') # 시각적 페이지를 제공하지 않도록 브라우저를 설정합니다.

options.add_argument('lang=zh_CN.UTF-8') # 인코딩 설정

options.add_argument('--disable-infobars') # 전략 비활성화

options.add_argument('--no-sandbox') # DevToolsActivePort 파일이 존재하지 않는다는 오류 해결

options.add_argument('window-size=1920x1080') # 브라우저 해상도 지정

options.add_argument('--disable-gpu') # Google 문서에서는 버그를 피하기 위해 이 속성을 추가해야 한다고 언급합니다.

options.add_argument('--incognito') # 보이지 않는 모드(시크릿 모드)

options.add_argument('--disable-javascript') # 사용javascript

options.add_argument('--start-maximized') # 최대화 작업(전체 화면 창), 설정하지 않으면 요소를 가져올 때 오류가 보고됩니다.

options.add_argument('--disable-infobars') # 브라우저가 자동화된 프로그램에 의해 제어되고 있다는 메시지를 비활성화합니다.

options.add_argument('--hide-scrollbars') # 일부 특수 페이지를 처리하기 위해 스크롤 막대를 숨깁니다.

options.add_argument('blink-settings=imagesEnabled=false') # 이미지를 로드하지 않고 속도를 향상시킵니다.

options.add_argument('사용자 에이전트: Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36

') #UA 요청 헤더 설정

드라이버 = webdriver.Chrome(chrome_options=옵션)

JS 스크립트 실행

Selenium에서 제공하는 API가 해당 작업을 완료하지 못하거나 작업이 번거로운 경우가 있는데, 이 경우 JS 스크립트를 사용하여 슬라이딩 스크롤바를 실행하는 등의 방법을 사용할 수 있습니다.

js ='window.scrollTo(0,100)' # 실행할 JS 스크립트 문

드라이버.execute_script(js) #JS 스크립트 실행

프레임 전환

일반적으로 대부분의 웹사이트 페이지는 프레임 중첩을 사용하는데, 이때 프레임 중첩 페이지의 내용이 표시되더라도 Youku와 같은 로그인 창과 같은 프레임 요소를 직접 찾을 수는 없습니다.

이때 프레임 안의 요소를 조작하려면 먼저 프레임으로 전환한 후 위치를 지정해야 합니다.

드라이버.스위치_to.frame('alibaba-login-box') # 지정된 프레임으로 전환합니다.

driver.switch_to.default_content() # 기본 페이지로 다시 전환

지문 기능 숨기기

slenium을 사용하여 실행되는 대부분의 브라우저는 일부 지문 특성을 통해 웹 사이트에서 모니터링됩니다.크롤러 동작이 인식되면 Selenium의 작동이 거부됩니다.이 상황을 방지하는 방법은 브라우저가 감지하기 전에 이러한 특성을 어떻게 사용하는지가 핵심입니다. 숨겨진, 사실은 선배들이 우리를 위해 길을 닦아 주었습니다. 이 문제를 해결하는 열쇠는 실제로 Stealth.min.js 파일입니다. 이 파일은 인형극용입니다. Python에서 사용하는 경우 이 파일을 실행해야 합니다. 파일획득방법은 node.js 설치가 필요하며, 단말은 npx extract-stealth-evasions를 실행하여 파일을 다운로드하고, 브라우저를 구동하기 전 아래의 코드를 추가합니다.

with open('stealth.min.js') as f:      js = f.read()  driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {'source': js})

결론

이 글에서는 Selenium+Python의 설치와 사용법, 그리고 몇 가지 기본적이고 일반적으로 사용되는 API 작업에 대해서만 간략하게 소개하고 있으며, 좀 더 심층적인 이해와 학습이 필요한 고급 작업과 사용법도 많이 있습니다. 실제 적용에서는 더 깊은 이해와 학습이 필요한 다른 프레임워크 및 도구와 통합해야 할 수도 있습니다.

기초부터 숙달까지 Python 인터페이스 자동화 테스트(2023 최신 버전)

추천

출처blog.csdn.net/ada4656/article/details/134584607