inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

현업에서 제네릭 쓰나요?

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 가끔 오류날 때 recompile 해보곤 하는데.. G:\spring\spring-data-project\jpashop\src\main\java\jpabook\jpashop\api\ MemberApiController.java : uses unchecked or unsafe operations. Recompile with -Xlint:unchecked for details. 이게 뭔가하고 찾아보니, @Data @AllArgsConstructor static class Result<T>{ private int count; private T data; } 여기 이 부분이.. 물론 파란색이라 에러같은 느낌은 아니고, 그냥 안내 정도로 보이긴 하는데, https://bgpark.tistory.com/33 근데 제가 언뜻 왠만하면 제네릭 쓰지 말라고 들었던거 같긴 한데 기억이.. 잘못들었는지 왜곡되었는지.. 옛날 라이브러리들은 제네릭으로 구현된게 많아서 그냥 그거 쓰고 제네릭으로 따로 구현하지 말랬던거 같은데.. 제가 잘못 기억하고 있는 거겠죠?

  • java
  • spring
  • spring-boot
  • jpa
궁금이 댓글 1 좋아요 1 조회수 910

버튼을 누르지 않았는데도 if 문을 실행하네요

미해결

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

Left 버튼을 누르지 않았는데도 _playerPos.x 구문으로 넘어가서 실행 시 계속 원을 좌측으로 보내 버리네요 코드를 다시 보고 있는데 어디가 잘못되었는지 잘 안보이네요..

  • c++
  • 네트워크
  • ue-blueprint
  • 게임수학
  • windows-api
김성범 댓글 1 좋아요 0 조회수 415

프레젠테이션 레이어 테스트 코드 작성시 코틀린 non-nullable

미해결

Practical Testing: 실용적인 테스트 가이드

안녕하세요. 강의 잘 보고 있습니다. 요청 객체를 테스트(ex. 신규상품을 등록할때 타입은 필수 값이다.) 할 때에 코틀린을 사용하는 경우 productType은 non-nullable 입니다. data class ProductCreateRequest( @field:NotNull(message = "상품 타입을 선택해주세요.") val type: ProductType, @field:NotNull(message = "판매 상태를 선택해주세요.") val sellingStatus: ProductSellingStatus, @field:NotBlank(message = "상품명을 입력해주세요.") val name: String, @field:Positive(message = "상품 가격을 입력해주세요.") val price: Int, ) 이런 경우 enum 타입은 bean Validation에서 NotNull이나 NotBlank에 대한 테스트는 불가능한 상태인데요. 이렇게되면 테스트 가능한 것들만 하는게 맞는건가요?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
Louie(루이) 댓글 2 좋아요 0 조회수 452

rejectValue() 사용시 arguments에 따른 defaultMessage

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

검증 로직에서 arguments 값이 있는 경우 defaultMessage를 작성하지 않으면 컴파일 에러가 발생합니다. 이 이유는 무엇인가요? arguments는 메세지에 사용하는 인자를 뜻한다고 했는데 사용할 인자는 있는데 사용대상이 없을 경우를 대비한걸까요? if (!StringUtils.hasText(item.getItemName())) { bindingResult.rejectValue("itemName","required"); } if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { bindingResult.rejectValue("price","range",new Object[]{1000,1000000},null); }

  • spring
  • mvc
  • bindingresult
  • defaultmessage
  • rejectvalue()
bam 댓글 2 좋아요 1 조회수 489

TopAppBar 관련부분에 빨간줄이 ..

미해결

[LV1] Jetpack Compose - UI 연습하기

실행하면 Type mismatch: inferred type is Unit but Modifier was expected : 27 즉 27번 라인에서 오류가 난다네요 ㅠㅠㅠ

  • android
  • kotlin
  • jetpack
shafeel2 댓글 3 좋아요 0 조회수 431

Test에서 NullpointerException이 떠요

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의중 커넥션풀을 이용해 Test를 해보는 부분입니다. (강의에선 V1 로 사용하지만 저는 V0이라고 이름만 다르게했습니다) 강의에선 이렇게 코드를 작성하시는데, 저는 똑같이 해서 test해보면 아래 crud메서드의 repository.save (member); 부분에서 nullpointerException이 발생합니다. 혹시 beforeEach 메서드 내의 초기화부분이 잘못된건가 해서 이런식으로 초기화부분을 crud 메서드 안으로 가져온뒤 실행하면 테스트에 성공합니다. 어디에 문제가 있는지를 잘 모르겠습니다.

  • spring
  • mvc
  • spring-jdbc
cn1056 댓글 1 좋아요 0 조회수 396

튜플 출력 관련 질문 입니다.

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

기초가 부족해서 기초부터 다시시작하고 있는 중입니다. ㅠㅠ 두가지 궁금한 사항이 있는데요, a1=(1), a2=(1,) a3=('a'), a4=('a',) a5=('ab'), a6=('ab',) 이런식으로 튜플과 리스트, 집합을 전부 출력해봤습니다. 위처럼 출력해보니 집합에는 순서가 없기 때문에 인덱싱이나 슬라이싱이 안되는지 등 다양한 로직?들을 깨닳았는데요, 근데 두가지 궁금증을 해결하지 못한 부분이 있습니다. 첫번째 질문은, 튜플 출력시에 a=(1)을 int로 인식해서 출력이 안되는건 이해를 했으나, a=('a')인 경우 출력이 되더라구요. 근데 a=(1)을 int로 인식해서 출력을 못한거라면, 'a'도 str로 인식해서 출력이 안되어야 하는게 정상아닌가요? 왜 a는 출력이되고 1은 출력이 안되는지 이해가 되지않습니다 ㅠㅠ 두번째 질문은, 'ab'를 출력했을 때, 튜플은 a만 출력이 되는데, 리스트는 왜 ab전부다 출력이 되는지 이해가 되지 않습니다. 왜그런걸까요..??

  • python
최진명 댓글 1 좋아요 0 조회수 244

페이지구현 - 일기수정(Edit) 수정 에러 질문

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

정환님 안녕하세요. 질문이 있습니다. DiaryEditor 컴포넌트로 onCreate, onEdit 함수를 전달하여 일기를 생성, 수정 하는데요. 이때, 일기 생성 후, 일기를 수정 하면 수정된 일기 + 수정된 일기가 1개 더 추가 생성이 되는 에러가 발생하여서요. 어떤 부분이 문제인지 짐작이 안갑니다. ㅠㅠ 아래 코드 캡쳐본 첨부드립니다. 답변주시면 감사하겠습니다. 그리고 강의 잘 듣고있습니다. 좋은 강의 감사합니다 :) App 컴포넌트 Edit 컴포넌트 DiaryEditor 컴포넌트

  • javascript
  • react
  • node.js
mlucky 댓글 4 좋아요 0 조회수 497

이클립스 WebContent나오지 않음 질문

미해결

누구나 따라하면서 배우는 JSP 커뮤니티 게시판 만들기

혹시 이 부분에서 강의의 Webcontent라는 폴더를 webapp이라는 폴더와 같은 부분으로 봐도 무방한가요?? 안에 META-INF와 WEB-INF가 있어서요..

  • java
  • jsp
seongun44 댓글 2 좋아요 0 조회수 814

컨테이너 런타임에 대한 질문이 있습니다.

해결됨

그림으로 배우는 쿠버네티스(v1.35)

안녕하세요! 쉽배쿠부터 수업을 쭉 진행하고 있는데, 계속 의문점이 드는 부분이 있어 이것저것 시도해 보다가 질문드립니다..! 쉽배쿠 수업 당시, "컨테이너 런타임에 문제가 생겼다면?" 을 진행하면서 마스터 노드의 컨테이너 런타임인 containerd를 stop 하는 테스트를 진행 했었습니다. 이를 통해 컨테이너 런타임 을 지정할 때 containerd를 사용하는 것이 도커를 컨테이너 런타임으로 사용하는 것 보다, 더 안정성 있게 동작 할 수 있다는 점도 알게 되었습니다. 당시 전체적인 구상도를 보며, VM의 마스터노드, 워커노드 그리고 파드와 컨테이너까지 "아 Docker는 사용되는 부분이 없구나" 라고 생각했습니다. (실제로 그림에도 도커는 없었으니까요 🙂 ) 하지만, 이번 그배쿠 강의를 들으면서 환경 설정을 하는 쉘 스크립트에 도커를 설치하는 부분이 존재했고, 실제 docker --version / docker info 등의 명령어를 실행하니 도커가 동작 중 이라는 것을 확인했습니다. 여기서 들게 된 의문점은 다음과 같습니다! 현재 그배쿠 강좌는 컨테이너 런타임으로 무엇을 사용하나요? 또한 쉽배쿠 강좌에서는 실제로 도커를 어디에도 사용하지 않았나요? 쿠버네티스가 현재 도커 지원 중단( 컨테이너 런타임으로써의 중단 )한 것으로 알고 있습니다. 따라서 현재 그배쿠 강좌에서 컨테이너 런타임으로 "컨테이너디"를 사용 하는 것이 맞다면 "컨테이너디" 가 알아서 컨테이너를 관리 해줄 것으로 생각되는데, 현재 설치된 도커는 어떤 역할을 수행하는 것인가요? 컨테이너의 관리를 위해서는 도커와 컨테이너디 둘 다 설치 하는 것은 필수적인가요? 어느정도 쓰다보니까 이해가 된 것 같기도 한데,,, 아리송하여 질문을 드립니다. 감사합니다!

  • docker
  • kubernetes
cloud 댓글 1 좋아요 0 조회수 380

에러가 표시되지 않습니

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

이런식으로 세미콜론을 빠트리거나 out을 빠트리는 등 문법적 오류가 발생하여도 빨간색 밑줄로 표시해주지를 않네요. 어떻게 해결해야 하나요?

  • C#
이상현 댓글 1 좋아요 0 조회수 308

파이어베이스 설정중 안드로이드스튜디오 프로젝트 에러

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

정말 죄송하지만 파이어베이스 관련에러인데요 코팩 책을 보면서 파이어베이스 설정을 하다가 Flutterfire configure 부터 오피셜 파어베이스가 필요하다는 에러만 뜨더라고요 구글링 해보니 적용하려는 안스 프로젝트의 폴더에 파베 파일을 넣어보라길래(기존 작업중이던 프로젝트) 그대로 했더니 파베도 설정 안되고 멀쩡하던 안스 프로젝트까지 아래와 같이 에러가 났습니다. * What went wrong: A problem occurred configuring project ':cloud_firestore'. > defaultConfig contains custom BuildConfig fields, but the feature is disabled. To enable the feature, add the following to your module-level build.gradle: `android.buildFeatures.buildConfig true` 일단 해당 파베를 지웠다가 아예 다른 d드라이브에 다시 깔아봤지만 동일하고.. 그래들 프로퍼티 파일에 아래를 추가도 했고요 android.buildFeatures.buildConfig=true 어떻게도 위 에러가 없어지질 않네요ㅜ 위 에러메시지는 어떤 부분을 봐야하는지 방향성만이라도 알려주시면 감사하겠습니다.

  • flutter
  • 클론코딩
박정인 댓글 1 좋아요 0 조회수 389

dit d 차이점 질문

해결됨

풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]

선생님 안녕하세요 좋은 강의 감사합니다. 기초적인 질문일수도 있는데 조금 헷갈려서요 docker run -d -p 9999:80 --name httpdweb3 myweb3 이라고 썼을때와 docker run -dit -p 9999:80 --name httpdweb3 myweb3 라고 썼을때의 본질적인? 차이점이 무엇인거죠? it가 터미널 입력을 열어놓고 가상 터미널을 할당하는 옵션 등등 인건 수업자료에 나와있는데, 조금 더 실질적인 차이..?가 잘 안와닿아서요. 질문드립니다!

  • 네트워크
  • linux
  • docker
nathan 댓글 1 좋아요 0 조회수 371

NoSuchElementException Stacktrace 에러입니다.

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

진행 중 에러가 나왔습니다.. 해당 부분에서 어떻게 잘못되었는지 파악을 못해서 글 남깁니다.. File "c:\Users\cksth\OneDrive\바탕 화면\Career\크롤링\심화3\ 09.click.py ", line 71, in <module> raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"img.sFlh5c.pT0Scc.iPVvYb"} (Session info: chrome=119.0.6045.124); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception Stacktrace: from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import urllib.request import time import pyautogui import os # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 크롬창 안뜨게 함 # chrome_options.add_argument('--headless') # headless 모드 활성화 # chrome_options.add_argument('--disable-gpu') # GPU 가속 비활성화 # 불필요 메세지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 크롬 드라이버 자동 업데이트 browser = webdriver.Chrome(options=chrome_options) keyword = pyautogui.prompt('검색어를 입력하세요.') cnt = 0 # 폴더 만들기 (이미 존재하면 += 1) while True: cnt += 1 folder_path = f'크롤링/심화3/{keyword}{cnt}모음' if not os.path.exists(folder_path): os.mkdir(folder_path) break path = f'https://www.google.com/search?q={keyword}&sca_esv=581612012&tbm=isch&sxsrf=AM9HkKnRu6DCGGz23e29xT4BSB7Hq95zgA:1699754235522&source=lnms&sa=X&ved=2ahUKEwiboaf7rb2CAxWJfd4KHWkWA9MQ_AUoAXoECAQQAw&biw=1552&bih=737&dpr=1.65' # 구글 browser.implicitly_wait(3) browser.maximize_window() browser.get(path) before_h = browser.execute_script("return window.scrollY") # 무한스크롤 while True: # 맨 아래로 스크롤을 내림 browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END) time.sleep(5) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") # 스크롤 높이가 맨 아래와 같다면 무한루프 탈출 if after_h == before_h: print('OKOK') break # 스크롤 높이 업데이트 before_h = after_h # 썸네일 이미지 태그 추출 imgs = browser.find_elements(By.CSS_SELECTOR, '.rg_i.Q4LuWd') for i, img in enumerate(imgs, 1): # 이미지 클릭 후 큰 사이즈 찾음 # 클릭하면 element click intercepted -> JS 로 직접 클릭 유도 browser.execute_script('arguments[0].click();', img) time.sleep(1) # 큰 이미지 주소 추출 target = browser.find_element(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb') img_src = target.get_attribute('src') # 에러 해결중 # if i == 1: # target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[0] # else: # target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[1] # img_src = target.get_attribute('src') # urllib.error.HTTPError: HTTP Error 403: Forbidden 해결방안 3줄 opener = urllib.request.build_opener() opener.addheaders = [('User-Agent', 'Mozila/5.0')] urllib.request.install_opener(opener) # 이미지 저장 try: urllib.request.urlretrieve(img_src, f'크롤링/심화3/{keyword}{cnt}모음/{keyword}{i}.png') except: pass print(f'img {i}개: {target}') print('\nDvlp.H.Y.C.Sol\nJason')

  • python
  • 웹-크롤링
찬솔 댓글 2 좋아요 0 조회수 851

강의 내용으로 블로그를 작성해도 될까요?

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

강의를 보고 배운내용을 오래 기억하기 위해 인용하여 블로그를 작성해도 될까요? 핵심이라고 생각되는 소스코드를 복사하거나 가끔 이론설명 하실때 사용하시는 ppt 페이지(그림) 일부분 이런걸 복사한 뒤, 저의 생각과 함께 글을 작성해보려고 하는데 가능할까요? medium 블로그를 통해 출처와 같이 작성할 것 같습니다.

  • flutter
  • 클론코딩
댓글 1 좋아요 0 조회수 429

캡슐콜라이더 적용해서 몬스터와 충돌시 회전문제

해결됨

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

유니티짱과 몬스터 캡슐콜라이더 설정 한 후에 충돌 하면 유니티짱이 회전을 해서 이런 모습으로 변합니다. 거의 90도 꺾여있는듯이요. 아래는 유니티짱의 컴포넌트들인데요. 뭔가 설정이 잘못된 부분이 있나요?

  • C#
  • unity
boneoflily 댓글 1 좋아요 0 조회수 482

강의에 사용된 코드는 제공되지 않나요

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

보통 강의는 github 주소가 제공되는데 강의에 사용된 코드는 제공되지 않나요

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
3ㅇ 댓글 1 좋아요 0 조회수 597

2주 뒤 코딩테스트 저 준비할 수 있을까요?

해결됨

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다. 솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함) 남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다. 현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다. 어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈) 1->9 2->8 . . 9->1 0->0 a->z . . ​ A->B . . 예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기 알고리즘 2번. 대리출석한 사람 수 (실버3) [1,2][1,2][1,2] =>2 본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1) 정사각형 형태의 데이터를 주고 자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고 그 안에 알파벳 개수 제한 둔 것이 가능한지

  • python
  • 코딩-테스트
  • 알고리즘
minchan 댓글 1 좋아요 1 조회수 1027

이런 질문 드려서 죄송합니다.

해결됨

코딩테스트 [ ALL IN ONE ]

결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다. 솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함) 남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다. 현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다. 어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈) 1->9 2->8 . . 9->1 0->0 a->z . . ​ A->B . . 예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기 알고리즘 2번. 대리출석한 사람 수 (실버3) [1,2][1,2][1,2] =>2 본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1) 정사각형 형태의 데이터를 주고 자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고 그 안에 알파벳 개수 제한 둔 것이 가능한지

  • python
  • 코딩-테스트
  • 알고리즘
minchan 댓글 1 좋아요 1 조회수 507

구글 큰이미지 크롤링 IndexError입니다.

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

안녕하세요. 이전 에러를 해결하고 다시 코드를 잡기 시작했습니다... 에러 내용은 IndexError: list index out of range 입니다. 다른분이 올려주신 글을 읽어보기도 했는데 제 코드에서는 문제점이 무엇인지 잘 모르겠습니다. 두번째 인덱스가 없기 때문인거같은데 큰 그림만 가져오고싶습니다 ㅠ from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import urllib.request import time import pyautogui import os # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 크롬창 안뜨게 함 chrome_options.add_argument('--headless') # headless 모드 활성화 chrome_options.add_argument('--disable-gpu') # GPU 가속 비활성화 # 불필요 메세지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 크롬 드라이버 자동 업데이트 browser = webdriver.Chrome(options=chrome_options) keyword = pyautogui.prompt('검색어를 입력하세요.') cnt = 0 # 폴더 만들기 (이미 존재하면 += 1) while True: cnt += 1 folder_path = f'크롤링/심화3/{keyword}{cnt}모음' if not os.path.exists(folder_path): os.mkdir(folder_path) break path = f'https://www.google.com/search?q={keyword}&sca_esv=581612012&tbm=isch&sxsrf=AM9HkKnRu6DCGGz23e29xT4BSB7Hq95zgA:1699754235522&source=lnms&sa=X&ved=2ahUKEwiboaf7rb2CAxWJfd4KHWkWA9MQ_AUoAXoECAQQAw&biw=1552&bih=737&dpr=1.65' # 구글 browser.implicitly_wait(3) browser.maximize_window() browser.get(path) before_h = browser.execute_script("return window.scrollY") # 무한스크롤 while True: time.sleep(5) # 맨 아래로 스크롤을 내림 browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") # 스크롤 높이가 맨 아래와 같다면 무한루프 탈출 if after_h == before_h: print('OKOK') break # 스크롤 높이 업데이트 before_h = after_h # 썸네일 이미지 태그 추출 imgs = browser.find_elements(By.CSS_SELECTOR, '.rg_i.Q4LuWd') for i, img in enumerate(imgs, 1): # 이미지 클릭 후 큰 사이즈 찾음 img.click() time.sleep(1) # 큰 이미지 주소 추출 if i == 1: target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[0] else: target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[1] # IndexError: list index out of range img_src = target.get_attribute('src') # urllib.error.HTTPError: HTTP Error 403: Forbidden 해결방안 3줄 opener = urllib.request.build_opener() opener.addheaders = [('User-Agent', 'Mozila/5.0')] urllib.request.install_opener(opener) # 이미지 저장 try: urllib.request.urlretrieve(img_src, f'크롤링/심화3/{keyword}{cnt}모음/{keyword}{i}.png') except: pass print(f'img {i}개: {target}') print('\nDvlp.H.Y.C.Sol\nJason')

  • python
  • 웹-크롤링
찬솔 댓글 2 좋아요 0 조회수 551

인기 태그

인프런 TOP Writers

주간 인기글