Skip to content

Latest commit

 

History

History
214 lines (158 loc) · 6.04 KB

220222.md

File metadata and controls

214 lines (158 loc) · 6.04 KB

Day 130

업무자동화(RPA)

웹 자동화

Selenium 기본

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

s = Service('C:/webdriver/chromedriver.exe')
browser = webdriver.Chrome(service=s)

browser.get("https://naver.com") # 네이버로 이동

elem = browser.find_element(By.LINK_TEXT, "카페") # '카페'라는 글자로 element 찾기

elem.get_attribute("href") # attribute 정보 가져오기

elem.click()      # element를 클릭

browser.back()    # 뒤로 가기
browser.forward() # 앞으로 가기
browser.back()
browser.refresh() # 새로 고침

elem = browser.find_element(By.ID, "query") # 검색창 id가 query므로 id로 찾는다.
elem.send_keys("텍스트")   # 검색창에 "텍스트"라는 글자를 입력
elem.send_keys(Keys.ENTER) # 엔터를 입력

elem = browser.find_element(By.TAG_NAME, "a") # a 태그에 해당하는 첫 번째 element를 가져옴
elems = browser.find_elements(By.TAG_NAME, "a") # a 태그에 해당하는 element를 전부 가져옴

browser.get("https://daum.net")
elem = browser.find_element(By.NAME, "q") # 다음의 검색창 name은 q임
elem.send_keys("텍스트")
elem.clear() # element에 입력되어 있는 텍스트를 지워준다.
elem.send_keys("텍스트")

elem = browser.find_element(By.XPATH, '//*[@id="daumSearch"]/fieldset/div/div/button[2]') # xpath로 element 가져옴
elem.click()

browser.save_screenshot("daum.png") # 스크린샷
browser.page_source # 브라우저의 html 소스
browser.close() # 현재 탭만 닫기
browser.quit()  # 브라우저 전체 종료

Iframe

<html>
    <body>
        <iframe id="1">
            <html>
                <body>
                    <div...>
                </body>
            </html>
        </iframe>

        <iframe id="2">
            <html>
                <body>
                    <div..>
                </body>
            </html>
        </iframe>
    </body>
<html>

간단한 위와 같이 iframe을 사용한 html 구조이다.

iframe 내부의 element에 접근하려면 해당 iframe으로 전환해야 접근할 수 있다.

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

s = Service('C:/webdriver/chromedriver.exe')
browser = webdriver.Chrome(service=s)

browser.get('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_input_type_radio')

browser.switch_to.frame('iframeResult') # 프레임 전환

elem = browser.find_element(By.XPATH, '//*[@id="age1"]')

elem.click()

browser.switch_to.default_content() # 상위로 빠져 나옴

time.sleep(3)

browser.quit()

iframeResult는 iframe의 id이다.

Radio

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
s = Service('C:/webdriver/chromedriver.exe')

browser = webdriver.Chrome(service=s, options=options)

browser.get('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_input_type_radio')

browser.switch_to.frame('iframeResult')

elem = browser.find_element(By.XPATH, '//*[@id="age1"]')

# 선택이 안되어 있으면 선택하기
if elem.is_selected() == False: # 라디오 버튼이 선택되어 있지 않으면
    print('Not selected')
    elem.click()
else: # 라디오 버튼이 선택되어 있으면
    print('selected')

time.sleep(3)

# 선택이 안되어 있으면 선택하기
if elem.is_selected() == False: # 라디오 버튼이 선택되어 있지 않으면
    print('Not selected')
    elem.click()
else: # 라디오 버튼이 선택되어 있으면
    print('selected')

time.sleep(3)

browser.quit()

Not selected
selected

위의 options 부분은 chrome_browser_main_extra_parts_metrics.cc 같은 오류 메세지를 없애주는 역할을 해준다.

Checkbox

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
s = Service('C:/webdriver/chromedriver.exe')

browser = webdriver.Chrome(service=s, options=options)

browser.get('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_input_type_checkbox')

browser.switch_to.frame('iframeResult')

elem = browser.find_element(By.XPATH, '//*[@id="vehicle1"]')

if elem.is_selected() == False:
    print('Not selected')
    elem.click()
else:
    print('Selected')

time.sleep(2)

browser.quit()

체크 박스는 라디오 버튼과 다르게 다시 클릭하면 해제되므로 if문을 잘 이용해야 한다.

Select & Option

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
s = Service('C:/webdriver/chromedriver.exe')

browser = webdriver.Chrome(service=s, options=options)

browser.get('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')

browser.switch_to.frame('iframeResult')

# cars에 해당하는 element를 찾고, 드롭다운 내부에 있는 3번째 옵션을 선택
elem = browser.find_element(By.XPATH, '//*[@id="cars"]/option[3]') # [1]이 첫 번째
elem.click()

time.sleep(3)

# 완전히 일치하는 텍스트 값을 통해서 선택
# 옵션 중에서 텍스트가 Saab인 항목을 선택
elem = browser.find_element(By.XPATH, '//*[@id="cars"]/option[text()="Saab"]')
elem.click()

time.sleep(3)

# 텍스트 값이 부분 일치하는 항목 선택하는 방법
# 옵션 중에서 텍스트가 Vo를 포함하는 항목을 선택
elem = browser.find_element(By.XPATH, '//*[@id="cars"]/option[contains(text(), "Vo")]')
elem.click()

time.sleep(3)

browser.quit()

select option 태그는 드롭다운 형식이다.