본문 바로가기
카테고리 없음

[Python] 셀레니움 모듈

by byeolsub 2023. 4. 26.
# 셀레니움 모듈 : 브라우저를 직접 제어함. : 로그인, 버튼 클릭등
#                크롬으로만 가능

📌

from selenium import webdriver #pip install selenium
import time

# chromedriver.exe" : 크롬을 제어할 수 있는 실행 파일
# 크롬에서 제공.
# 브라우저 실행
driver = webdriver.Chrome("c:/setup/chromedriver.exe")
# 브라우저에 ttp://python.org url 요청
driver.get("<http://python.org>")

# chromedriver.exe" : 크롬을 제어할 수 있는 실행 파일
# 크롬에서 제공.
# 브라우저 실행
driver = webdriver.Chrome("c:/setup/chromedriver.exe")
# 브라우저에 ttp://python.org url 요청
driver.get("<http://python.org>")
time.sleep(1) # 1초동안 대기
# find_elements : 
#      css selector : css 언어에서 사용하는 선택자 방식 
# #top ul.menu li : id="top"인 태그의 하위 태그 중
#                   class="menu"인 ul태그.
#                   ul 태그의 하위 태그인 li 태그들.
menus = driver.find_elements("css selector", '#top ul.menu li')
menus[0].text
for m in menus : 
    if m.text == 'PyPI' : 
        # m : li 태그 하나
        pypi = m # menu 중 PyPI인 값을 가진 메뉴
        print(m.tag_name, m.text)
pypi.click() # li 객체를 클릭
time.sleep(5)
driver.quit()

 

'''
execute_script() : 자바스크립트 함수 실행.
   document.getElementsByName('id')[0].value='aaa'
   document.getElementsByName('id') : name 속성이 id인 태그들

find_elements(선택방법, 선택자) : 여러개 태그 선택 => selenium 4버전이후   
find_element(선택하는 방법, 선택자) :  하나의 태그 선택
              xpath : xml 방식으로 태그를 찾아가는 방법
                     //*[@id="log.login"] : id 속성값이 log.login인 태그 한개 선택.
                         // : root 노드. 최상위 노드. 처음부터
                         * : 모든태그
                         [] : 속성값
                         @id : id 속성
                         log.login : id 속성 값
                         
 선택방법에 사용되는 문자열
  By.XPATH : "xpath" : xml에서 사용되는 태그 검색 방식
  By.CLASS_NAME : "class name" : 클래스 속성값
  By CSS_SELECTOR : "css selector" : css 문서에서 사용하는 선택자 방식
  By.ID :"id" : id 속성값
  By.TAG_NAME : "tag name" : 태그 이름
                        
'''

 

📌

#네이버에 로그인하기
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome("c:/setup/chromedriver.exe") 
driver.get("<https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com>")

# input : 화면에서 문자열 입력
id = input("네이버 아이디를 입력하세요.:")
# 아이디 칸에 입력된 네이버 아이디 전달
driver.execute_script("document.getElementsByName('id')[0].value='"+ id +"'")
pw = input("네이버 비밀번호를 입력하세요.:")
time.sleep(1)
driver.execute_script("document.getElementsByName('pw')[0].value='"+ pw +"'")
time.sleep(1)

#driver.find_element('xpath','//*[@id="log.login"]').click()
driver.find_element('xpath','//*[@id="log.login"]').click()

📌

### 다음daum 페이지에서 이미지 다운받아 저장하기
from selenium import webdriver
import time
import urllib.request as req
import os

driver = webdriver.Chrome("c:/setup/chromedriver.exe") 
driver.get("<https://search.daum.net/search?nil_suggest=btn&w=img&DA=SBC&q=%EC%9E%A5%EB%AF%B8>")
time.sleep(3)
# images : 현재 다음 페이지의 img 태그목록들을 저장
images = driver.find_elements("css selector","#imgList > div > a > img")
img_url = []
for image in images :
    # image :  태그 한개 
    url = image.get_attribute('src') # src 속성값
    img_url.append(url) # 이미지 저장 url
print(img_url) 
driver.quit() # 브라우저 종료

# img_url의 목록을 다운받아 img 폴더에 저장
img_folder = './img' # 현재폴더 하위의 img 폴더
if not os.path.isdir(img_folder) : # img폴더가 폴더형태 아니니?
    os.mkdir(img_folder) # 폴더생성
#enumerate() : 괄호안의 리스트가져옴
for index, link in enumerate(img_url) :
		#index: 리스트의 순서
		#link : url의 정보
    # urlretrieve : url의 결과를 파일로 저장. 
    req.urlretrieve(link, f'./img/{index}.jpg')

 


📌

### 현재 화면을 이미지 파일로 저장하기
driver = webdriver.Chrome("c:/setup/chromedriver.exe")
time.sleep(1)
driver.get("<https://search.daum.net/search?nil_suggest=btn&w=img&DA=SBC&q=%EC%9E%A5%EB%AF%B8>")
time.sleep(1)
driver.save_screenshot("img/rosepage.png")
driver.quit()

위의 창이 1초동안 유지된후 자동으로 닫아지면 정상 실행.