안녕하세요 스타트코딩님! 수업 잘 듣고 있는 학생입니다. 질문이 있어 글 남깁니다. 수업 듣기 전에 혼자 해볼 때 저는 soup를 사용하지 않고 find_element를 사용해서 이렇게 코드를 작성했는데 뭐가 다른 걸까요? from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time import pandas as pd driver = webdriver.Chrome() driver.get('https://search.shopping.naver.com/search/all?query=%EB%8B%AD%EA%B0%80%EC%8A%B4%EC%82%B4') # 스크롤 전 높이 last_height = driver.execute_script('return document.body.scrollHeight') while True: # 스크롤 끝까지 내리기 driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 대기 시간 줘야됨 !!! time.sleep(1) # 스크롤 후 높이 after_height = driver.execute_script('return document.body.scrollHeight') # 비교 (if, break) if last_height == after_height: break # 스크롤 전 높이 업데이트 last_height = after_height products = driver.find_elements(By.CSS_SELECTOR, '.product_item__MDtDF') data = [] for product in products: name = product.find_element(By.CSS_SELECTOR, '.product_title__Mmw2K').text link = product.find_element(By.CSS_SELECTOR, '.product_title__Mmw2K > a').get_attribute('href') price = product.find_element(By.CSS_SELECTOR, '.price_num__S2p_v').text.split('원')[0].replace(',', '') data.append([name, link, int(price)]) df = pd.DataFrame(data, columns = ['상품명', '상세페이지링크', '가격']) df.to_excel('네이버쇼핑.xlsx')
안녕하세요. 강의를 듣고 pyside로 데스크톱 어플리케이션을 만들고 있는 중에 있습니다. QGridLayout 안에 위젯들을 2열로 배치하였는데요, 이 위젯들이 위젯 아이템들 중 가장 너비가 넓은 것에 맞춰 같은 너비를 차지하면서도 위젯들이 윈도우 전체를 차지하지 않는(=커지거나 작아지지 않는) 방법이 있나요..? 생각보다 어려워서 며칠 째 끙끙대다 결국 질문남겨봅니다.
실제 https로 배포된 API를 fetch를 활용하여 SSR을 구현하고있습니다. 문제는 local에서는 yarn build -> yarn start 하고 테스트를 진행하면 fetch가 정상적으로 작동합니다. 하지만 AWS Amplify를 활용하여 Next JS를 배포하고 배포한 사이트에서 fetch(pending 이후에 catch로 빠짐)가 작동하지않습니다. API에 문제가 있나해서 다른 API를 CSR로 테스트를 해보면 정상적으로 200이 됩니다. 원인이 뭘까요?
폴라우트 페이지 2를 보면서 / 인덱스페이지가 강사님은 static 페이지가 아닌 다이나믹 페이지로 빌드가 되는 부분에서 강사님은 fetch에 force-cache를 적용시키면서 이제 다이나믹된 페이지를 static 페이지로 바꾸셨느데 일단 저는 force-cache 옵션을 적용을 안해도 static 페이지이더라구요 강사님과 저랑 다른 점은 api호출하는 함수 부분을 따로 api 폴더에 빼둔거 말고는 다른 점은 없습니다 . 이렇게 따로 빼놓은 뒤 그냥 promis.all로 데이터 패칭을 해서 그대로 화면에 보여줬습니다 (이것저것 시험하느라 Allbook ,RandomBook 컴포넌트를 따로 빼지는 않은 상태입니다. ) export default async function Home() { const [allBooks, randomBooks] = await Promise.all([ fetchBooks(), fetchRandomBook(), ]); 저는 force-cache 를 적용안햇는데도 왜 다이나믹 페이지가 안되고 static 페이지가 되는걸까요 ...
Parent 클래스가 자료형 Child 클래스가 생성자로 // 업캐스팅 이름이 parent 인 객체를 만들었는데 parent.x parent.y 를 했을경우 값이 어떻게 출력돼나요? 변수x는 부모랑 자식에 둘다 있어서 모르겠습니다 상속을 받는 경우 , 기능(매서드)을 상속받고 변수들은 어떻게 되는건가요? Static 처럼 타입형을 참조하는건가요?
안녕하세요. %s 형식으로 출력할때에는 나머지 자리를 공백이 아닌 다른 문자열로 대체해서 출력하는 옵션이 존재할까요? print('%10s' %('nice')) -> 나머지 자리 공백으로 표시 -> %s형식으로 출력할때에도 아래 옵션처림 남는차리를 특정 문자열로 채울 수 있는지 궁금합니다. print('{:_>10}'.format('nice')) -> 남는자리 _으로 표시 감사합니다.
안녕하세요, 강의 잘 듣고 있습니다. jwtUtil.js 의 beforeRes 함수에서 아래 코드 관련 문의사항이 있습니다. // "ERROR_ACCESS_TOKEN" => JWTCheckFilter에서 어떠한 이유에서든 오류가 발생 시 if (data && data.error === 'ERROR_ACCESS_TOKEN') { const memberCookieValue = getCookie("member"); const result = await refreshJWT(memberCookieValue.accessToken, memberCookieValue.refreshToken); console.log("refreshJWT RESULT", result); memberCookieValue.accessToken = result.accessToken; memberCookieValue.refreshToken = result.refreshToken; setCookie("member", JSON.stringify(memberCookieValue), 1); // 원래의 호출 const originalRequest = res.config; originalRequest.headers.Authorization = `Bearer ${result.accessToken}`; return await axios(originalRequest); } 위 코드를 보면, accessToken (또는 refreshToken이 같이) 새로 발급된 후, setCookie 함수로 cookie에는 새롭게 갱신된 accessToken/refreshToken을 저장하고 있지만, redux store에는 갱신된 token 정보들을 업데이트 하지 않고 있는 것 같습니다. (loginSlice의 reducer를 호출하지 않고 있네요...) 혹시 redux store에도 새롭게 refresh된 token들을 저장하고 싶다면, 어느 부분에서 처리해야 할까요? 감사합니다.
안녕하세요 강사님 목소리가 귀에 쏙쏙박혀 잘듣고있습니다. 강의 내용이 2024년 초 기준이라 1년이 지난 현재시점 node LTS 버전이 20.xx.x 버전에서 지금은 22.xx.x 버전으로 올랐습니다. 버전에 따른 이슈가 있을수도있을것같은데 강의 버전에 맞춰서 진행해야하나요? 아니면 최신버전으로 진행해도 문제없을까요?