본문 바로가기

S-DEV/다크웹

Web Crowlling - 1

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()

 

- 특정 사이트에서 셀레니움을 탐지할 경우 

셀레니움 탐지 O

 

셀레니움 탐지 X

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 주소 확인

로그인 사이트 URL 주소를 확인한다. 

 

 

2. 로그인 ID / PW 위치 확인 

 

2.1 ID값을 찾은 후, 값 입력하기 

로그인 ID 위치 확인
ID 값 입력

id = browser.find_element(By.ID,"id")
id.click()
id.send_keys("test")

find_element 함수를 사용해 ID 값이 "id" 인걸 찾은 후, send_keys로 값을 보낸다.

 

2.2 PW값을 찾은 후, 값 입력하기 

로그인 PW 위치 확인
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