Ⅰ. 오전 수업
A. 1교시: JavaScript
1. 지난 시간 복습
- 조건문과 반복문
- 배열과 객체
- 배열의 길이 활용
- 배열을 위한 함수
- 객체
2. 객체
3. 함수
B. 2교시: JavaScript
1. 함수(cont.)
2. DOM(Document Objcet Model)
3. 실습
C. 3교시: JavaScript
1. 실습
Ⅱ. 오후 수업
A. 4교시: Crawling
1. 지난 시간 복습
2. Selenium
B. 5교시: Crawling
1. 실습
C. 6교시: Crawling
1. 실습(cont.)
Ⅲ. CARRER UP
A. 특강: 네이버 클라우드 교육
B. 특강: 네이버 클라우드 교육
Ⅳ. 하루 돌아보기
# Python
if 조건:
조건이 참일 때 실행할 코드
elif 조건:
조건이 참일 때 실행할 코드
else:
# JavaScript
if (조건1) {
조건1이 참일 때 실행할 코드;
} else if (조건2) {
조건2가 참일 때 실행할 코드;
} else {
모든 조건이 거짓일 때 실행할 코드;
}
# Python
for i in range(1,10,1)
# JavaScript
for (let i = 0; i < 10; i++){
console.log("반복문")
}
for ([초기문]; [조건문]; [증감문])
문장
1. 초기화 구문인 초기문이 존재한다면 초기문이 실행됩니다. 이 표현은 보통 1이나 반복문 카운터로 초기 설정이 됩니다. 그러나 복잡한 구문으로 표현 될 때도 있습니다. 또한 변수로 선언 되기도 합니다.
2. 조건문은 조건을 검사합니다. 만약 조건문이 참이라면, 그 반복문은 실행됩니다. 만약 조건문이 거짓이라면, 그 for문은 종결됩니다. 만약 그 조건문이 생략된다면, 그 조건문은 참으로 추정됩니다.
3. 문장이 실행됩니다. 많은 문장을 실행할 경우엔, { } 를 써서 문장들을 묶어 줍니다.
4. 갱신 구문인 증감문이 존재한다면 실행되고 2번째 단계로 돌아갑니다.
배열과 객체 개념 및 데이터 타입은 모든 언어에 존재
.length) 활용let person = {
name : "정형"
, age : 20
, money : null
}
person.height = "200";
: 어디서 많이 본 형태 → CSS도 객체 형태였음!

person.school[3];
person.school[3].전공;복잡한 객체 구조를 분석할 때는 한 가지만 기억하자! → 배열은 인덱스로 조회, 객체는 키로 조회
()는 기능을 의미function plus() {alert("함수가 실행됐습니다!");}public static int plus(int a, int b) {return a+b;} , public static int plus(double a, double b) {return a+b;}function 함수이름(매개변수1, 매개변수2, ...) { // 함수 실행 코드 return 반환값; }function 키워드: 함수를 정의할 때 사용합니다.
함수이름: 함수를 식별하는 이름입니다.
매개변수: 함수 내부에서 사용할 입력값입니다. 0개 이상일 수 있습니다.
return 키워드: 함수에서 반환할 값을 지정합니다. 생략 가능하며, 생략 시 undefined가 반환됩니다.
- 부족하면 부족한대로
![]()
- 콘솔 출력 → undefined(NaN은 1과 undefined를 더해서 발생)
- 넘치면 넘친대로
- 콘솔 출력 → 1만 들어감
- 연산을 진행할 때는 +를 제외하고 -, *, / 연산은 문자와 숫자가 가능하다 (권장X)
+
- 콘솔 출력 → 문자열임
+연잔자는 문자열과 문자열도 되고 숫자와 숫자도 됨 → 숫자와 문자열이 들어오면 숫자를 문자열로 변환한 뒤 붙여버림-
- 콘솔 출력 → 숫자임
-, *, /는 숫자와 숫자만 됨 → 숫자와 문자열이 들어오면 문자열을 숫자로 변환한 뒤 계산해버림
const print = () => {
console.log("프린트 문 실행");
}

이제 진짜 실전으로 들어감: 태그 제어하기 → 먼저 DOM 개념을 알아야 한다!
리엑트 안 쓰는 곳에서는 DOM 많이 사용
리엑트 쓰는 곳은 virtual DOM 사용(기본적인 원리와 개념은 비슷한데 접근법이 조금 다름)
리엑트, 앵귤러, 뷰 같은 최신 프레임워크나 라이브러리에서는 DOM 사용을 권장하지 않고 있다고 함








<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1 id="text">나를 수집해 봐!</h1>
<button onclick="change()">텍스트 변경</button>
<script>
// 컨텐츠 변경
// 실습: 버튼을 클릭했을 때 h1의 글자를 "변경 완료"라고 수정하기
// 핵심: dom에서 내용을 변경할 때는 대입을 통해서 변경한다. → 객체 기반이기 때문!
const change = () => {
document.getElementById("text").innerText = "변경 완료";
}
</script>
</body>
</html>

XSS
XSS(Cross Site Scripting)는 웹 서버 사용자에 대한 입력값 검증이 미흡할 때 발생하는 취약점으로, 주로 여러 사용자가 보는 게시판이나 메일 등을 통해 악성 스크립트를 삽입하는 공격 기법입니다.



# 더보기 버튼의 위치를 driver에게 알려주기!
btn_more = driver.find_element(By.CSS_SELECTOR, "a.c_05")
btn_more.click()
# 더 보기 버튼을 여러 번 눌러야 함 → 반복문 실행 & try, except 사용
# 1. for 문
try:
for i in range(50):
btn_more = driver.find_element(By.CSS_SELECTOR, "a.c_05")
btn_more.click()
time.sleep(1)
except:
print("더 보기 버튼 모두 클릭 완료!")
2. while 문
while True:
try:
btn_more = driver.find_element(By.CSS_SELECTOR, "a.c_05")
btn_more.click()
time.sleep(1)
except:
break
# 한 셀에 전부 모아 정리하기
from selenium import webdriver as wb
from selenium.webdriver.common.by import By
import time
import pandas as pd
# 1. 웹 드라이버에게 페이지 요청 후 열기
driver = wb.Chrome()
driver.get("https://www.hsd.co.kr/menu/menu_list")
time.sleep(1) # 1초
# 2. while 문을 활용하여 더 보기 버튼 모두 누르기 → 메뉴 전체가 출력되도록
while True:
try:
btn_more = driver.find_element(By.CSS_SELECTOR, "a.c_05")
btn_more.click()
time.sleep(1)
except:
break
# 3. 도시락 메뉴명, 가격
menu = driver.find_elements(By.CSS_SELECTOR,"h4.h.fz_03")
price = driver.find_elements(By.CSS_SELECTOR,"div.item-price>strong")
dic = {
"메뉴명": menu_list
, "가격":price_list
}
for i in range(len(menu)):
menu_list.append(menu[i].text)
price_list.append(price[i].text)
pd.DataFrame(dic)
주의: 화면 닫히면 데이터 수집 안 됨(웹 브라우저 창이 반드시 켜져 있어야 데이터 수집이 가능합니다.)
→ 선택자 정보는 브라우저를 통해 태그 정보를 가져오기 때문에 find_element(s) 할 때는 항상 코드로 연 크롬 창이 켜져 있어야 함
직접 컴퓨터를 조립해서 게임
PC방 가서 게임