728x90
∙ Selenium
- Requests는 단 하나의 웹 요청만 처리한다.
- JS, JQuery, Ajax 등 동적인 웹 페이지 처리하기에는 부족하다.
- Python에서 동적 웹 테스팅을 위해 개발된 웹 드라이버이다.
- Xpath와 CSS, DOM과 같은 다양한 위치 지정자의 위치 제공
- 특정 텍스트박스에 값을 입력 후 클릭 제공
∙ web browser 열기
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.naver.com")
input()
- 이미지 요청 해제
from selenium import webdriver
# 이미지 요청 해제
prefs = {
"profile.managed_default_content_settings.images" : 2
}
# 크롭 브라우저 옵션 객체 생성
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("prefs",prefs)
browser = webdriver.Chrome(options = chrome_options)
browser.get("https://www.naver.com")
input()
- 특정 사이트에서 셀레니움을 탐지할 경우
from selenium import webdriver
browser = webdriver.Chrome()
# 특정 사이트에서 셀레니움을 탐지하면 아래 옵션 추가
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
{"source": """ Object.defineProperty(navigator, 'webdriver',
{ get: () => undefined }) """})
browser.get("https://www.naver.com")
input()
∙ 실습 (네이버 로그인)
1. 로그인 사이트 URL 주소 확인
로그인 사이트 URL 주소를 확인한다.
2. 로그인 ID / PW 위치 확인
2.1 ID값을 찾은 후, 값 입력하기
id = browser.find_element(By.ID,"id")
id.click()
id.send_keys("test")
find_element 함수를 사용해 ID 값이 "id" 인걸 찾은 후, send_keys로 값을 보낸다.
2.2 PW값을 찾은 후, 값 입력하기
pw = browser.find_element(By.ID,"pw")
pw.click()
pw.send_keys("test")
위에서 찾은 id를 찾은거처럼 찾은 후, pw 값을 입력해 준다.
3. ID / PW 입력 후 로그인 버튼 누르기
login_button = browser.find_element(By.CLASS_NAME,"btn_login")
login_button.click()
로그인 버튼은 ID값이 없어 Class명으로 찾은 후, click()을 사용해 눌러준다.
- 전체 소스 코드
from selenium import webdriver
from selenium.webdriver.common.by import By
import time,random
url = "https://nid.naver.com/nidlogin.login"
browser = webdriver.Chrome()
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
{"source": """ Object.defineProperty(navigator, 'webdriver',
{ get: () => undefined }) """})
browser.get(url)
# 해당 id 입력
id = browser.find_element(By.ID,"id")
id.click()
id.send_keys("test")
browser.implicitly_wait(random.randint(3,5))
time.sleep(random.randint(3,5))
# 해당 pw 입력
pw = browser.find_element(By.ID,"pw")
pw.click()
pw.send_keys("test")
browser.implicitly_wait(random.randint(3,5))
time.sleep(random.randint(3,5))
# 로그인 버튼 누르기
login_button = browser.find_element(By.CLASS_NAME,"btn_login")
login_button.click()
input()
'S-DEV > 다크웹' 카테고리의 다른 글
다크웹 (0) | 2023.08.17 |
---|---|
데이터베이스 (0) | 2023.08.13 |
웹 크롤링 기본 개념 (0) | 2023.08.05 |
간단한 Flask 웹 서버 (0) | 2023.07.25 |
pyautogui 사용하기 (0) | 2023.07.25 |