묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
안녕하세요 선생님 여기에 이런 질문을 해도될지 모르겠지만 부탁드립니다ㅠㅠ
셀레니움 크롬 드라이버를 배우고 웹하드 크롤링을 하려고 하는데 예기치 못한 상황이 생겼습니다... https://smartfile.co.kr/ 스마트파일이라는 사이트를 크롤링하려고 하는데 일단 크롬드라이버로 사이트에 접속을하고원하는 카테고리의 정보를 (페이지 번호, 개수 등등)을 넣어서 beautiful soup로 받아오려고 했지만 특정 카테고리에 가서 url을 그대로 복사하고 브라우저에서 복사한 url을 그대로 입력후 접속을 하니까 smart file이라는 글자만 나오고 자료가 나오지 않는 상황이 생깁니다..그래서 뭔가 막아놨구나 생각해서 chrome driver로 카테고리를 클릭해서 들어가려고 코드를 짰는데 카테고리를 클릭하니까 구글로 이동이됩니다. 뭔가 되게 많이 막아놓은것같은데 자바스크립트 명령어로 클릭을 해봐도 동일한 결과가 나옵니다 어떻게 하면 좋을까요 부탁드립니다... 이것은 driver를 생성하는 모듈입니다""" 크롬 드라이버 생성 및 설정 모듈 """ from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager def create_driver(): # 크롬 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option('detach', True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option('excludeSwitches', ['enable-logging']) # 크롬 드라이버 최신 버전 설치 service = Service(executable_path=ChromeDriverManager().install()) # 드라이버 객체 생성 driver = webdriver.Chrome(service=service, options=chrome_options) driver.service = service driver.implicitly_wait(10) driver.maximize_window() return driver 이것은 크롬드라이버를 생성해서 크롤링을하려고 크롬드라이버로 접속해서 해당 url에 접속하는 모듈입니다import time from selenium import webdriver from selenium.webdriver.common.by import By def execute_crawling(driver: webdriver.Chrome, url: str): for i in range(2): driver.get(url) time.sleep(2) if i == 0: menu_book = driver.find_element(By.CSS_SELECTOR, '#wrap > div.wrap-nav-wrap > div > ul.depth1 > li.menutop_DOC.m9') driver.execute_script("arguments[0].click();", menu_book) time.sleep(1)
-
미해결모의해킹 실무자가 알려주는, 파일 업로드 취약점 공격 기법과 실무 사례 분석 : PART 1
tomcat 설치가안되네요?
강의보고 따라하다가 apache 화면은 잘 출력됩니다. 추가로 tomcat 설치시 오류메시지 뜨네요 혹시나 java7 설치했는데, 그래도 안되네요 어떻게 해야할까요?JRE_HOME 환경변수를 설정해줘야 할까요
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
실행을 하면 결과가 깨져서 나와요
선생님이 하신 코드와 똑같이 하고 실행을 시켰는데 위에 세개는 실행이 되는데 아래 두개는 깨져서 나옵니다오류는 없다고 뜨는데 이상하네요
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
oauth 관련 질문 있어요.
안녕하세요. 강의 잘 듣고 있습니다.user - service - google가 있다고 했을 때,user가 oauth code grant방식으로 login을 하면 service가 callback을 통해 code를 받게되고, 그 정보와 다른 정보를 조합하여 google로 부터 access token과 refresh token을 받아올텐데요.여기서 token을 어떤식으로 처리하는지 궁금합니다.service가 google로 부터 받은 token들을 app으로 전달하는 건가요? 그렇다면 app은 token이 만료되면 google에 직접 토큰을 다시 요청하는걸까요? 아니면 service를 통해 relay를 해서 토큰을 다시 요청할까요? service는 token이 올바른건지는 검증할 수 없으니 db에 저장을 해 두고 나중에 같은 토큰을 user로부터 받았을때 같은지 비교해서 허용할 지 말지 알 수 있을거 같은데 이렇게 하는건가요?아니면 service가 직접 새로운 토큰들을 생성해서 관리하는게 좋을까요?그리고 public app에서 보안을 더 강화하기 위해 pkce방식도 쓰는거 같던데 실제 많이 쓰시는지 궁금하네요.답변 부탁드립니다.감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
개인적으로 repository save 구현 후 데이터가 생성되지 않습니다.
타임리프와 MVC 컨트롤러 저장 기능만 간단하게 만들어서 테스트를 해보았는데 저장 기능이 동작하지 않는 부분에 대해서 질문합니다.간단하게 만든 유저 클래스 정보는 아래와 같습니다.아래 사진은 리포지토리 저장 기능만 구현해둔 상태입니다. 아래는 컨트롤러 내용입니다.아래는 타임리프로 간단하게 만든 입력창 입니다.실제로 localhost를 띄우면 정상적으로 나옵니다.그러나 이름과 나이를 입력 후 제출을 누르면 데이터가 생겨나지 않습니다.확인을 위해 리포지토리 Save 메서드에 로그로 저장 성공 시에 로그 출력을 걸어두었는데 아무것도 뜨지 않으며 터미널창에 반응조차 없습니다. 이 부분에 대해서 배웠던 코드랑 비교해도 차이점을 잘 모르겠습니다.강의 들을 때는 정상적으로 동작했었으나 제가 개인적으로 위와 같이 따로 만든 경우에는 반응이 없습니다. 왜 이런 현상이 일어나는지 혹시 알 수 있을까요? 계속해서 고민해보고 생각해보았는데 도무지 모르겠어서 질문 올립니다.
-
해결됨스프링 핵심 원리 - 기본편
컴포넌트 스캔 쓰나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]기존의 AppConfig가 훨씬 좋은 것 같아요..먼저 구현체의 이름으로 등록된다는 점, 그리고 갈아끼울 때 구현체 코드를 수정해야 된다는 점, 그리고 궁극적으로 의존관계를 한눈에 보지 못하는데 이거 쓰나요..?
-
미해결배달앱 클론코딩 [with React Native]
react-native-image-crop-picker --> openPicker 오류
안녕하세요ImagePicker.openCamera <- 정상 동작ImagePicker.openPicker <- Required permission missing위 내용입니다확인 부탁드립니다.
-
해결됨스프링 핵심 원리 - 기본편
@PostConstruct와 영속성 컨텍스트
안녕하세요 @PostConstruct를 배우고 활용해보던 중 궁금증이 생겨 질문을 작성합니다.레포지토리는 JPARepository를 상속 받은 상태입니다! 테스트 데이터를 미리 집어 넣기위해 PostConstruct를 사용하였는데요. 궁금증에 더티체킹이 이루어지는지 알아보고 싶어 기존에 저장되어있던 test라는 user데이터를 가져와 이름을 바꾸어보았는데 select 쿼리만 나가고 update쿼리가 나오지 않았습니다. 영속성 컨텍스트에서 관리가 안되고있는 것 같은데 정확한 이유가 궁금합니다 @PostConstruct @Transactional public void test() { User test = userRepository.findByLoginId("test"); test.setName("changeName"); }
-
미해결[리뉴얼] 타입스크립트 올인원 : Part2. 실전 분석편
initialState가 제네릭 S인 이유가 잘 이해가 되지 않습니다.
안녕하세요, 항상 좋은 강의 감사드립니다.기존에 리덕스를 사용한 경험이 있어서 작성하신 리덕스 사용법에 대해서는 의문이 없으나ReducersMapObject의 제네릭 S가 initialState라고 말씀해주셨는데 해당 부분이 잘 이해가 되지 않습니다.제가 현재 이해한 로직으로는combineReducers자리에 ReducersMapObject<S, A>타입이 들어가고 ReducersMapObject<S, A>은 객체로서 해당 객체의 key값은제네릭 S의 key값을 K로 받고 해당 value값(S[K])을 Reducer의 첫번째 제네릭으로 ( Reducer<S[K], A>) 들어가 initialState 타입을 리턴해주는 함수타입이 되고 ReducersMapObject 객체의 value값 타입으로 적용되고있습니다. 하지만 아무리 강의를 반복해서 봐도 S가 initialState가 되는 인과관계가 파악이 안되고 있습니다 위의 로직은 전부 S가 initialState라는 약속하에 이해되는 로직인데 해당 약속을 어디서 파악할 수 있는지 혹시 제가 놓친 부분이 있을까요?어렴풋이 짐작해본 이유로는 createStore 함수를 실행할 때 두번째 인자로 initialState를 넣은 부분이 아닐까 싶은데해당 이유를 설명해주시면 감사하겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
종화 방귀 문제
제가 문제를 처음에 종화가 방귀를 꼈을 때 종화를 기준으로 상하좌우 한 칸 씩만 오염된다로 이해했는데 그런 것이 아니라 방귀를 끼는 순간 종화의 좌표를 기준으로 연결된 육지(숫자 1)들은 전부 바다(숫자 0)으로 변한다는 문제인거죠??
-
해결됨실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
네이버 쇼핑 크롤링 1
강의 : 네이버 쇼핑 크롤링 1 , 11:14 시점에서 막힙니다. from bs4 import BeautifulSoup import requests keyword = input("검색할 제품을 입력하세요 : ") url = "https://search.shopping.naver.com/search/all?query={keyword}" user_agent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36" headers = {'User-Agent': user_agent} req = requests.get(url, headers=headers) html = req.text # print(html[:1000]) 확인용 soup = BeautifulSoup(html, "html.parser") base_divs = soup.select("[class^=product_item]") # product_item 로 클래스 이름이 시작되는 클래스 # print(base_divs) print(len(base_divs)) for base_div in base_divs: title = base_div.select_one("[class^=product_link]") print(title.text) 우선 강의에서는 basicLis_item, basicList_link 로 했는데 현재 네이버 쇼핑몰에서는 product_item***, product_link*** 로 되어 있습니다. 아래 스샷처럼요. 그런데 코드를 치니까 이상한게 나와요 자꾸..이유가 뭘까요 ??
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
인터페이스 강의를 듣고 궁금증이 생겼습니다.
1. interface클래스내에 정의된 메써드는 public abstract이고, 변수는 public static final이 자동으로 앞에 정의가 된다고 하셨는데 이건 고정인건가요? 다른 형태로 봐꿀 수 있나요?봐꿀 수 없다면 왜 그러한지가 궁금합니다. interface 클래스를 implements해주고 추상클래스를 extends 해주는 것은 둘 다 상속인건가요? 둘다 부모 클래스가 되는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2주차 #4-2 재귀적으로 코드짜기
http://boj.kr/7226630a963848e3bdc6a61318877151짠 코드가 적절한가요?적절하다면 재귀함수는 기저사례가 필요하다고 했는데 제가 짠 코드에서 기저사례는 어디에 있나요?틀렸다면 어디를 어떻게 고치는게 좋을지 알려주셨으면 좋겠습니다.감사합니다
-
해결됨이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
안녕하세요 선생님 매크로 F12 이슈 ..
F12 로 매크로 정의부를 보려고 했는데 파일을 찾을 수 없다고 합니다. 혹시 해결방법이 있을까요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
셀레니움 정상 작동 되다가 오늘부로 갑자기 오류가 발생
안녕하세요. 강의를 잘 수강하고 있습니다.다름이 아니라 셀레니움으로 작성했던 코드들이 정상적으로 모두 잘 작동되다가 오늘부로 갑자기 오류가 발생하여 문의드립니다!오류를 해결하기 위해 버전 업그레이드도 모두 하였고, 재부팅도 해보았지만 셀레니움으로 작성했던 모든 코드들에서 맨 아래와 같은 오류가 발생했습니다 ㅠㅠ 코드는 아래와 같습니다.# -*- coding: utf-8 -*- # 외우는거 아님. 그냥 필요할 때 복붙 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By import time # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager #브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) service = Service(executable_path=ChromeDriverManager().install()) browser = webdriver.Chrome(service=service, options=chrome_options) # 웹페이지 해당 주소 이동 browser.get("https://www.naver.com")오류 메시지는 다음과 같습니다.Traceback (most recent call last): File "c:\pratice_crolling\실습4_셀레니움 기본 설정\[기초복붙용]셀레니움 기본 설정.py", line 21, in <module> File "C:\Users\hyeonseok\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\chrome.py", line 39, in install driver_path = self._get_driver_path(self.driver) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hyeonseok\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\core\manager.py", line 30, in getdriver_path file = self._download_manager.download_file(driver.get_driver_download_url()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hyeonseok\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\drivers\chrome.py", line 40, in get_driver_download_url driver_version_to_download = self.get_driver_version_to_download() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hyeonseok\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\core\driver.py", line 51, in get_driver_version_to_download self._driver_to_download_version = self._version if self._version not in (None, "latest") else self.get_latest_release_version() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hyeonseok\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\drivers\chrome.py", line 62, in get_latest_release_version resp = self._http_client.get(url=latest_release_url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hyeonseok\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\core\http.py", line 37, in get self.validate_response(resp) File "C:\Users\hyeonseok\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\core\http.py", line 16, in validate_response raise ValueError(f"There is no such driver by url {resp.url}")ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790
-
미해결스프링부트 시큐리티 & JWT 강의
마지막 강의에서doFilterInternal jwtHeader 테스트
package com.cos.jwt.config.jwt; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; // 시큐리티가 filter를 가지고 있는데, 그 필터중에 BasicAuthenticationFilter라는 것이 있음. // 권한이나 인증이 필요한 특정 주소를 요청했을 때 위 필터를 무조건 타게 되어있음. // 만약 권한이나 인증이 필요한 주소가 아니라면 이 필터를 안타요. public class JwtAuthorizationFilter extends BasicAuthenticationFilter { public JwtAuthorizationFilter(AuthenticationManager authenticationManager) { super(authenticationManager); } //인증이나 권한이 필요한 주소요청이 있을 때 해당 필터를 타게 됨. @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { super.doFilterInternal(request, response, chain); System.out.println("인증이나 권한이 필요한 주소 요청이 됨."); String jwtHeader = request.getHeader("Authorization"); System.out.println("jwtHeader = " + jwtHeader); } }마지막 강의에서 해당 코드 작성하고, jwtHeader test해보려는데,저는 강사님과 다르게 GET요청보내면 콘솔에 "필터3"만 떠요!코드를 살펴보니, MyFilter3에 POST요청일 때만 돌아가도록 로직이 구현되었는데,제가 수업 중 놓친 걸까요? 작성된 코드로는 불가능한 결과물인 것 같아서요 ㅠ
-
미해결
하나의 트랜잭션에서 여러번 DB에 접근할 때 커넥션 풀 질문
서비스단의 하나의 메소드에는 @Transactional로 트랜잭션이 선언되었다고 가정하겠습니다. 여쭤보고 싶은 건 하나의 트랜잭션으로 묶여있는 서비스의 메소드에서 여러 번 리포지토리의 메소드를 호출하여 디비에 접근할 경우인데요.이때 커넥션풀은 하나의 커넥션만 쓰는지 아니면 리포지토리를 호출할 때마다 여러번 쓰는지 궁금합니다.프로젝트를 하다가 한방 쿼리로 가져와야 하나, 여러번 쿼리를 쏴서 가져와야 하나 고민하던 중에 질문드립니다.
-
미해결장박사의 블록체인 이해와 구조
안녕하세요 강의자료 받을 수 있을까 해서 질문 남깁니다.
안녕하세요 강의자료 받을 수 있을까 해서 질문 남깁니다. 오늘 수강신청했는데 앞으로 열심히 들어보겠습니다. s000715@naver.com 입니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MappingJackson2HttpMessageConverter가 JsonConverter인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]MappingJackson2HttpMessageConverter가 JsonConverter인가요?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
데드락 관련해서 질문이 있습니다. 루키스님!
데드락 관련해서 버그가 떠서 질문글을 남깁니다.윈도우 어플리케이션을 생성해서 윈도우 메인에 서버에게 C_LOGIN을 보내는 패킷을 생성했습니다. 밑은 해당 코드입니다. bool flag = true; while (true) { if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { if (WM_QUIT == msg.message) break; if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } else { CEngine::GetInst()->progress(); CEditorObjMgr::GetInst()->progress(); ImGuiMgr::GetInst()->progress(); // 렌더 종료 CDevice::GetInst()->Present(); if (service->GetCurrentSessionCount() > 0 && KEY_RELEASE(KEY::A) && flag == true) { Protocol::C_LOGIN pkt; auto sendBuffer = ServerPacketHandler::MakeSendBuffer(pkt); sendBuffer = nullptr; flag = false; } } } return (int) msg.wParam; }A를 클릭해서 서버와 연결한 후에 X를 눌러서 윈도우 창을 닫았는데, 이후 이렇게 코어글로벌이 종료될 때, GSendBufferManager를 delete하는 부분에서 타고타고 들어가서 DeadLockProfiler가 DeadLock이 존재했다고, 알려줬습니다.Server에 OnConnected가 되었을 때, 패킷을 보내면 이런 문제가 일어나지 않았는데, 원하는 때, 원하는 키를 입력해서 패킷을 보내려고 하니까 문제가 일어나네요 ㅜㅜ문제를 알 수 있을까요? 프로토 버퍼를 사용해서 주고 받고 있습니다!