묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
-모듈화 강의 듣고있는데 아래 코드를 실행해보니 에러메시지가 뜹니다. FileNotFoundError: [Errno 2] No such file or directory: './already_done.txt'
-모듈화 강의 듣고있는데아래 코드를 실행해보니 에러메시지가 뜹니다. FileNotFoundError: [Errno 2] No such file or directory: './already_done.txt'행성했던 모든 파일 venv 폴더안에 들어있는데 왜이런메시지가 뜰까요? from ast import keyword from tokenize import maybe import pyperclip,time import chromedriver_autoinstaller import my_data chromedriver_autoinstaller.install() from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) driver = webdriver.Chrome(options=options) def login(driver): driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com") time.sleep(3) my_id, my_pw = my_data.id, my_data.pw # 1.element의 send_keys함수 사용시 네이버 로그인 캡챠가 # id_input.send_keys("아이디 입력하기 여기") # 2. pyperclip.copy~ # 아이디 입력하는 구간 id_selector = "#id" id_input = driver.find_element(By.CSS_SELECTOR, id_selector) id_input.click() time.sleep(0.3) pyperclip.copy(my_id) # ctrl + c 복사기능이 실행됨 time.sleep(0.3) ActionChains(driver).key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform() # ctrl + v 기능이 실행됨 time.sleep(0.5) #비밀번호 입력하는 구간 pw_selector = "#pw" pw_input = driver.find_element(By.CSS_SELECTOR, pw_selector) pw_input.click() time.sleep(0.3) pyperclip.copy(my_pw) # ctrl + c 복사기능이 실행됨 time.sleep(0.3) ActionChains(driver).key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform() # ctrl + v 기능이 실행됨 time.sleep(0.5) #로그인버튼 클릭하는 구간 login_btn_selector = "#log\.login" login_btn = driver.find_element(By.CSS_SELECTOR, login_btn_selector) login_btn.click() time.sleep(0.5) '''3강. 서이추 신청할 블로거들의 아이디 추출하는 기능''' def extract_blog_id(driver, keyword, max_count=50): search_link = f"https://search.naver.com/search.naver?query={keyword}=&where=blog&sm=tab_opt" driver.get(search_link) time.sleep(2) #우선, 스크롤을 계정이 200개 추출될 만큼 밑으로 내린다 max_count = 50 #스크롤해서 추출할 블로거들의 포스팅을 더 불러오게 한다. postings_selector = "#_view_review_body_html > div > more-contents > div > ul > li" postings = driver.find_elements(By.CSS_SELECTOR, postings_selector) cur_posting_count = len(postings) while cur_posting_count < max_count: driver.execute_script("window.scrollBy(0,500);") #스크롤하는경우 time.sleep(0.2) postings = driver.find_elements(By.CSS_SELECTOR, postings_selector) # cur_posting_count = len(postings) print("현재 ul 태그가 가지고 있는 li태그의 개수",cur_posting_count) #블로거의 계정을 추출 blog_ids = [] for idx in range(1, max_count + 1): title_selector = f"#sp_blog_{idx} > div > div > a" title_a_tag = driver.find_element(By.CSS_SELECTOR, title_selector) blog_link = title_a_tag.get_attribute("href") data = blog_link.split("/") target_blog_id = data[-2] blog_ids.append(target_blog_id) print(blog_ids) #추출한 블로거 계정 중복을 제거하기 blog_ids = list(set(blog_ids)) #A집합 #이미 이웃신청을 건 블로거의 계정을 제거 visited_accounts=[] #B집합 with open('./already_done.txt',"r") as f: _visited_accounts = f.readlines() for account in _visited_accounts: account = account.rstrip() visited_accounts.append(account) blog_ids = list(set(blog_ids) - set(visited_accounts)) #추출한 블로거 계정을 텍스트 파일에 추가하기 with open('./blog_id.txt',"a") as f: for blog_id in blog_ids: f.write(f"{blog_id}\n") def initialize(): with open('./blog_id.txt',"w") as f: f.write("") def add_buddy_send(drier): f = open('./blog_id.txt',"a") blog_ids = f.readlines() f.close() for blog_id in blog_ids : blog_id = blog_id.replace("\n", "") add_buddy_link = f"https://m.blog.naver.com/BuddyAddForm.naver?blogId={blog_id}" driver.get(add_buddy_link) time.sleep(3) # 0.에러상황: 서로 이웃 신청 버튼 자제차 없음: 이미 이웃 신청한 상태 both_add_buddy_btn_selector = "#bothBuddyRadio" try: # 0-1 버튼이 존재할 때 both_add_buddy_btn = driver.find_element(By.CSS_SELECTOR,both_add_buddy_btn_selector) except Exception as e: # 0-2 버튼이 존재하지 않을 때 print(e) continue # 0-1 버튼이 존재할 때 # 1.서로 이웃 신청을 받는 사람인가? both_add_buddy_btn_selector = "#bothBuddyRadio" both_add_buddy_btn = driver.find_element(By.CSS_SELECTOR,both_add_buddy_btn_selector) disabled = both_add_buddy_btn.get_attribute("disabled") if disabled == "true": continue # 2-1아 이제 정상이니까, 서로 이웃 신청 멘트를 작성하고 both_add_buddy_btn.click() time.sleep(1) comment_selector = "#buddyAddForm > fieldset > div > div.set_detail_t1 > div.set_detail_t1 > div > textarea" comment_box = driver.find_element(By.CSS_SELECTOR, comment_selector) comment_box.click() comment_box.clear() comment_box.click() time.sleep(0.3) comment = "안녕하세요. 초보블로거에용.... 블로그 잘보고갑니당" pyperclip.copy(comment) time.sleep(0.3) ActionChains(driver).key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform() # ctrl + v 기능이 실행됨 time.sleep(0.5) # 2-2 서이추 버튼을 누르는 기능을 개발 add_buddy_btn_selector = "body > ui-view > div.head.type1 > a.btn_ok" add_buddy_btn = driver.find_element(By.CSS_SELECTOR, add_buddy_btn_selector) add_buddy_btn.click() #이웃신청을 건 유저를 리스트에 추가한다. with open('./already_done.txt',"a") as f: f.write(f"{blog_id}\n") # 0.5초 딜레이로 이웃을 계속 신청하는 것은 이상함. 사람이 아님 time.sleep(7) driver = webdriver.Chrome(options=options) initialize() login(driver) #여러개의 키워드에서 이웃을 추출 keywords = ["배민원","배달창업"] for keyword in keywords: extract_blog_id(driver, keyword, max_count=10) add_buddy_send(driver)는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
navigation 화면 전환 질문드립니다.
안녕하세요, 우선 질좋은 강의 해주셔서 감사드립니다.다름이 아니라 Search Book 프래그먼트에서 검색어 입력 후 책을 클릭하면 Book Fragment로 이동합니다. 이 상태로 바텀 내비게이션의 Favorite Books 아이콘을 클릭하고 다시 Search Books 아이콘을 클릭하면 바텀 내비게이션 아이콘은 Favorite Books를 클릭한 상태로 보여집니다. 또한 Search Book Fragment를 보여줘야 할 것 같은데 여전히 클릭한 Book Fragment를 보여주고 있습니다.어떻게 해결해야 할까요?정리하자면, Book Fragment에 들어간 상태에서 BottomNavigationView의 Favorite Books 아이콘 클릭 후 다시 Search Books 아이콘을 클릭하면 이상하게 동작합니다. Search Books Fragment가 실행되게 하고 싶습니다.
-
미해결스프링 시큐리티 OAuth2
부록
부록 파트는 아직 미완상태인가요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
중요한건 아니지만 설계 툴에 관해
안녕하세요. 중요한 질문은 아니지만테이블 설계와 엔티티 설계 할때 쓰시는 툴이 따로 있으신가 해서 질문드립니다.바쁘실텐데 감사합니다.
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
String관련 질문입니다
안녕하세요 강의를 너무 잘 듣고 있습니다.다름이 아니라 String 강의를 듣다 질문이 있어 글을 남깁니다.String str1 = new String("APPLE"); String str2 = str1; str1 = "apple" System.out.println(str2);위와 같이 실행하게 되면 왜 APPLE가 출력 되는지 이해가 가질 않습니다. str1의 번짓수와 str2의 번짓수가 같기 때문에 달라질 것이라고 생각했습니다.
-
미해결언리얼 엔진4 입문 (C++ 기반)
생포인터 사용
안녕하세요 강사님 이거 하도하도 물어본다 해놓고 까먹어서 여기서 물어보게 되네요. 강의를 들으면서 가급적이면 생포인트를 사용하는 것을 지양하라고 하셨는데 어느 강의에서 강사님이 게임서버 회사에 일을 하는데 갑자기 서버가 크래쉬가 나서 원인을 찾으려해도 못찾아 결국은 신입이 많이 들어와서 그런거라 판별을 했지만, 알고보니 옛날에 작업하던 사람이 생포인터를 쓰고 신경을 쓰지 않아 문제가 생겼던 거라 기억을 합니다. 이런 얘기를 하시면서 지뢰를 설치하는 사람은 따로 있고 밟는 사람 따로 있다. 라고 하셨는데 결론은 결국 MMO RPG개발로 넘어가면 결국 생 포인터를 쓸 수 밖에 없는 상황이 오나요?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
Lightsail에 들어가지 못하면 강의 진행이 안될까요?
현재 Lightsail에 들어가지지 않는데... 이러면 강의 진행이 어려울까요...?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
drop table 후 질문드리겠습니다.
안녕하세요 제로초님 강의 잘듣고있습니다.배포는 처음이라 해당강의를 들으면서 무작정 따라하면서 실습을 하고 있습니다.근데 제가 모르고 drop table까지 따라해서 database가 삭제됬습니다.그래서 우분투 back으로 간 뒤 다시 db를 생성했습니다.근데 db는 정상적으로 생성이 됬는데 테이블을 검색해보면 다음과 같이 Empty set이 출력이 되더라고요이러한 경우에는 다시 인스턴스를 생성해야될까요? ㅜㅜ mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | recipe.io | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> use recipe.io; Database changed mysql> show tables; Empty set (0.00 sec) mysql>
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
30강 이후 404 에러 발생
안녕하세요!! 30강에서부터 버튼을 클릭할 때마다 Uncaught (in promise) 발생하며, 404에러가 발생하고 있습니다.api/users/login //// api/users/register 둘 다 404에러가 발생해서.... 주소의 오탈자가 있는 것 같진 않은데 혹시 어느 부분을 좀 더 점검해봐야할까요?
-
미해결자바스크립트 : 기초부터 실전까지 올인원
node.js 로 웹서버 구축할때 힘들었는데 넷리파이로 이렇게 쉽게 웹서버가 만들어지다니.. 감동입니다. 항상 서버도 살아있고 깃헙이랑 동기화되는게 장점인것같아요
node.js 로 웹서버 구축할때 힘들었는데 넷리파이로 이렇게 쉽게 웹서버가 만들어지다니.. 감동입니다. 항상 서버도 살아있고 깃헙이랑 동기화되는게 장점인것같아요
-
미해결Slack 클론 코딩[실시간 채팅 with React]
workspace의 userData를 출력하면 undefined출력 이후 값이 나오는 현상
import { Channels, Chats, Header, LogOutButton, MenuScroll, ProfileImg, ProfileModal, RightMenu, WorkspaceName, Workspaces, WorkspaceWrapper } from '@layouts/Workspace/styles' import fetcher from '@utils/fetcher'; import React, { useCallback, useState } from 'react'; import useSWR from 'swr'; import axios from 'axios' import gravatar from 'gravatar' import { IUser } from '@typings/db'; import { Navigate, Route, Routes } from 'react-router'; import loadable from '@loadable/component'; import Menu from '@components/Menu'; const Channel = loadable(() => import('@pages/Ch')); const DirectMessage = loadable(() => import('@pages/DirectMessage')); const Workspace = () => { const [showUserMenu, setShowUserMenu] = useState(false); const { data: userData, error, mutate } = useSWR<any>('/api/users', fetcher, { dedupingInterval: 2000, }); console.log(">>" + userData) const onLogout = useCallback(() => { console.log(userData) axios.post( '/api/users/logout', null, { withCredentials: true, }) .then(() => { mutate(false, false); // revalidateUser(false); }) .catch((err) => { console.log(err) }) }, []) const onClickUserProfile = useCallback(() => { setShowUserMenu((prev) => !prev); }, []) if (userData === false) { return <Routes><Route path="/*" element={<Navigate replace to="/login" />} /></Routes> } return ( <div> <Header> <RightMenu> <span onClick={onClickUserProfile}> {/* {gravatar.url(userData.email, { s: '28px', d: 'retro' })} */} <ProfileImg src="" alt="" /> {/* toggle */} {showUserMenu && (<Menu style={{ right: 0, top: 38 }} show={showUserMenu} onCloseModal={onClickUserProfile}> <ProfileModal> <img src="" alt="" /> <div> {/* <span id="profile-name">{userData.nickame}</span> */} <span id="profile-name">name</span> <span id="profile-active">Active</span> </div> </ProfileModal> <LogOutButton onClick={onLogout}>로그아웃</LogOutButton> </Menu> )} </span> </RightMenu> </Header> <WorkspaceWrapper> <Workspaces>te</Workspaces> <Channels> <WorkspaceName>Sleact</WorkspaceName> <MenuScroll>Menu Scroll</MenuScroll> </Channels> <Chats> <Routes> <Route path='/workspace/channel' element={<Channel />} /> <Route path='/workspace/dm' element={<DirectMessage />} /> </Routes> </Chats> </WorkspaceWrapper> {/* {children} */} </div> ) } export default Workspace;workspaceimport axios from 'axios'; const fetcher = (url: string) => axios .get(url, { withCredentials: true, }) .then((response) => response.data); export default fetcher; fetcher.ts Workspace에서 콘솔로 userData를 찍으면 undefined가 나온 뒤 값이 출력 되는데 먼저 뜨는 undefined때문에 에러가 나서 gravatar아이콘을 못 넣고 있습니다.(창이 처음 뜰 때만 undefined가 1회 나온 뒤 값이 출력 되고 이후에는 계속 undefined없이 값만 정상 출력 됩니다.)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 잘보고있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)아니오[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 강의너무 잘보고있습니다자바스크립트만 기본적으로 공부하다가 자바기본 강의를 보고 넘어왔습니다 메서드의 사용법이나 그런것은 이해가 되지만respository 에 있는 코드들과 service 에 있는 코드들은 성격적으로 어떻게 구체적으로 다른지 모르겠습니다혼자서라도 구현을 하게될때는 잘나눠서 구현을 해야할텐데그런부분은 감을 익히기위해서 무엇을 공부하는것이 좋을까요?
-
미해결구성 관리 자동화 도구 - 앤서블(Ansible)
-e 옵션이란 무엇일까요?
강의를 들으면서 ansible-playbook 명령어 입력 시에 대표적인 4가지 옵션들을 학습하였습니다. -i : 적용될 노드들을 선택 (보통 파일에 명시)-m : 사용하는 모듈-k : 암호를 물어보도록 설정-a : arguments 전달 앤서블과 관련된 깃허브를 돌아다니면서 다른 사람이 작성한 플레이북을 보던 중에 빈번하게 -e 옵션을 사용하는 것을 보았는데요,이 옵션이 무엇인지 구글링을 해봐도 확실할 설명을 못 찾겠네요... ㅠ어떤 목적으로 사용하는 옵션인지 궁금합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
8장 myip
https://www.inflearn.com/questions/680046 맛비님 이 질문자님이랑 똑같은 궁금증이 생겼는데 맛비님이 답변달아주신게 이해가 안가 재질문합니다!강의 영상중에 Xilinx에서 자동생성해준다는게 먼말인지 잘 모르겠습니다... 그 부분의 hierarchy 가 myip 구조로 되어있어요. <= 이 말도 무슨말씀이신지 잘모르겠습니다... 제가 수준이 많이 낮은점 이해 부탁드립니다ㅠ
-
미해결모두의 깃 & 깃허브
궁금한게 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강사님 강의 3일 내내 잘보았습니다.궁금한게있어서 질문드려요...리모트랑 클론 차이점을 잘 모르겠어요. 클론하면 자동으로 클론한 저장소로 지정이 되잖아요. 그러면 굳이 리모트를 쓰는것보다 클론 사용하면 되지않나요? 그리고 풀리퀘스트하는거 잘보았는데... 명령어 마지막에 푸쉬하고 깃허브 사이트 들어가서 풀리퀘스트하잖아요. 풀리퀘스트는 명령어에서 못하나요? 이렇게 두개 질문드립니다.이해는 다 가는데 막상 하려니까 잘모르겠네요 ㅜㅜ
-
미해결스프링 핵심 원리 - 기본편
memberRepository 빈이 언제 생성되는지 궁금해서 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의를 여러번 돌려봐도 이해가 안되서 질문드립니다..@Configuration을 적용하지않고 @Bean 만 적용해도 스프링빈으로 등록되지만, 싱글톤을 보장하지않아서 memberRepository 객체가 3개 생성되고 그중 1개만 스프링빈에 해당되고, 2개는 일반 객체이다라고 이해를 했는데요.스프링컨테이너가 빈으로 등록하기위해서 각각의 @Bean 을 호출해서 스프링빈을 생성하는걸로 알고있습니다. 1. 그런데 memberRepository 빈이 언제생성되는지 궁금해서 질문드립니다.스프링 컨테이너가 AppConfig에서@Beanpublic MemberService memberService() {...} 내에 있는 memberRepository()를 호출할때@Beanpublic MemberRepository memberRepository() {...} 을 호출해서 memberRepository 빈이 생성되는지, 아니면,@Beanpublic MemberRepository memberRepository() {...} 내에있는 return new MemoryMemberRepository()를 호출할때 memberRepository 빈이 생성되는지 궁금해서 질문드립니다. 2. @Configuration을 적용하지않고 @Bean 만 적용해서 테스트코드를 실행해보면 실행결과가call AppConfig.memberServicecall AppConfig.memberRepository // 1call AppConfig.orderServicecall AppConfig.memberRepository // 2call AppConfig.memberRepository // 3이렇게 나온다고 강의에서 설명해주셨는데,여기서 memberRepository빈은 어느것이고 일반객체인 memberRepository는 어느것인가요? 강의를 여러번 돌려봐도 이해가 안되서 질문드립니다.
-
미해결
SW 개발자를 위한 성능 좋은 SQL 쿼리 작성법 기간연장
안녕하세요제가 SW 개발자를 위한 성능 좋은 SQL 쿼리 작성법 강의를 수강했는데개인사정으로인해 해당 기간동안 수강을 하지 못한채 기간이 만료되었습니다 ㅜ혹시 가능하시면 일주일정도만 기간연장을 좀 요청 드려도 될까요?답변 기다리겠습니다.감사합니다.
-
미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
let out 질문 2
안녕하세요! 제가 초보자라 잘 이해가 되지 않아서 질문드립니다. let out 을 이벤트 리스너 안에서 선언하면 작동이 안되는건 확인했는데,out 이라는 변수를 이벤트 리스너 밖에서 사용하는 것도 아닌것 같은데 왜 밖에서 선언해야만 작동할까요?out 을 이벤트 리스너 밖에서도 사용하는 걸까요? strike 와 ball 도 이벤트 리스너 안에서만 사용되(는 것 같)고, 변수도 안에 존재하는데 .. 이 둘과는 다른 걸까요?( 이 부분은 그렇게 중요하지 않은건데 괜히 질문하는건 아닌지 모르겠어요... 네이X에 검색해도 이 부분에 대해서 나와있는 게 없는 것 같아서 질문드립니다ㅠㅠㅠㅠ )
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
기존 쓰레드 - Oh my god (Select모델 강의)
예전에 작업할 때, 소켓 접속마다 쓰레드 만들어줬었는데그렇게하면 안되는거였군요.구글에 찾아봐도 대부분 소켓마다 쓰레드 만들던데 (물론 국내 사이트)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
멀티플레이어 모드에서 카메라가 다른 플레이어를 중심으로 움직입니다
안녕하세요! 강의 열심히 듣고 있습니다!!제가 멀티 플레이어 모드에서 버그가 발생했는데요, camera 위치도 myPlayerController 에서만 lateUpdate 했는데멀티플레이어 모드에서 키보드 입력도 다른 캐릭터가 받고카메라도 다른 플레이어를 따라서 움직이는데 왜 그런지 알수 있을까요..?참고로 혼자 플레이 할때는 전부 정상적으로 작동 합니다!!