월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
이것도 로직이 바뀐 것 같아요.
안녕하세요.로직이 바뀐 것 같아서요.확인 부탁드립니다 ~그리고 최종 코드보면 새그룹을 만드는게 프로그램 시작되면로긴 후 바로 새그룹을 만들고 시작을 하더라고요.서이추를 하던중에 그룹인원이 꽉차면 만든다고강의에서 본 것 같거든요~로긴 후 바로 새그룹을 만들고 서이추가 시작되니까프로그램 시작할 때 마다 새그룹이 생겨서 빈 새그룹만 수십개가 되어버리고 있어요.
- 미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
pip install virtualenv 질문 있습니다.
pip install virtualenv 이것이요.강의 화면에선 LECTURE 이 폴더에 있는 전부가 적용되는건지, 아니면 blog_auto 이 폴더만 적용되는건지 궁금합니다. (앞으로 새로 만들 폴더에도 매번 작성해야하는지..)매번 폴더마다 python -m virtualenv venv 이걸 해주어야 하는건 알겠습니다만 pip install virtualenv 이것도 매번 폴더마다 해주어야하는건지가 궁금합니다.질문이 정리가 안되고 난해하네요 ;; ㅠㅠ
- 미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
chromedriver_autoinstaller 설치를 했는데 import가 되지 않아요..
안녕하세요. 수업 보면서 따라하고 있는데 처음부터 막히네요...터미널창에 chromedriver_autoinstaller 설치를 하고 import를 하려고 하는데 수업 화면처럼 자동완성이 되지 않더니터미널창에서 에러가 납니다.재설치를 하려고 하면 이미 설치가 되었다고 나오는데, 설치가 된건데 import가 되지 않는건가요? ㅜㅜㅜ
- 미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
"블로그 자동화 프로그램 개발 강의" 중 코드 확인 바랍니다.
1. 강의 중에 있는 1번 함수명의 인자와 232번 줄 함수명의 인자가 맞지 않아 에러가 발생하는 것 같습니다. 강의 몇번을 보았는데 위 이미지 처럼 강의 코드가 저기 까지 입니다. 맞는 코딩을 알려 주세요add_new_buddy_group 함수는 주석 처리 하는게 맞을 것 같은데 강의에는 주석처리가 안되어 있습니다. 이 부분 확인 바랍니다.
- 미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
time.sleep 에 대한 개선방법 문의
강의에서 기능 구현을 빠르게 하기위해 브라우저 화면 로딩이 끝날 때까지 time.sleep 으로 코드 진행을 멈추도록 작성되어 있습니다. 강의 도중에 해당 부분을 다른 방법으로 변경한다고 언급했는데, 변경되지 않은 채로 강의가 종료되었습니다. 이 부분은 어떻게 개선될 수 있을까요?일반적으로는 webdriver에서 제공하는 implicitly_wait을 이용하는 것으로 알고 있는데, 더 나은 방법이 있을까요?
- 미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
서이추 에러 URL 관련 문의
[이웃신청] 추출한 블로거의 계정에 이웃신청을 해봅시다 1위 강의에서 서이추 화면 URL 에러가 왜 발생한건가요? 에러라고 말씀하신 URL로 GET을 날려봤는데, 크롬 웹 드라이버가 아무런 반응을 하지 않더라구요. 혹시 다른 사이트 자동화를 할 때, 어떻게 지금처럼 "URL 에러구나" 라고 판단할 수 있는지 궁금합니다.그리고 이를 우회하기 위해서 모바일 페이지의 URL을 이용하신 것 같은데, 혹시 블로그에서 모바일 URL을 제공하지 않았다면 방법이 없었을까요?
- 해결됨블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
가상환경 만들어줄때 오류가 나타납니다.
이렇게 입력하면 오류가 나오는데 어떻게 해결해야되나요?
- 미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
처음에는 그냥 복사/붙여넣기 수준으로 따라하다가..
처음에는 그냥 복사/붙여넣기 수준으로 따라하다가.. 왜그런지 모르겠는데 오류가 생겨서 처음부터 강의 무한반복 수강하고 있습니다. 보면볼수록 자세히 설명해주셔서 넘 감사할따름입니다.그냥 흘겨듣던것들을 이제는 #으로 옆에 주석처리로 메모하면서 듣고있습니다. 이 내용만 습득하더라도 어느정도 셀레니움관련 다른 코드들을 읽는 눈이 생길것같습니다.선생님 혹시 셀레니움을 활용해서 얻을수있는것들에 대한 강의를 열어볼생각은 없으신지요? 안되면 줌으로라도 일대일강의... 부탁드립니다!!
- 해결됨블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
[Errno 2] No such file or directory: 오류가 나요..
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("") '''4강. 핵심기능 - 서로이웃추가 신청 보내기''' def add_buddy_send(driver): 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() 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() initialize() login(driver) #여러개의 키워드에서 이웃을 추출 keywords = ["배민원","1인창업"] for keyword in keywords: extract_blog_id(driver, keyword, max_count=10) add_buddy_send(driver)
- 해결됨블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
-모듈화 강의 듣고있는데 아래 코드를 실행해보니 에러메시지가 뜹니다. 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 문의하기를 이용해주세요.
- 해결됨블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
13:53 배경음악이 키우시는 고양이 응아하는 소리인가요?ㅋㅋ
13:53 배경음악이 키우시는 고양이 응아하는 소리인가요?ㅋㅋ
- 해결됨블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
서로 이웃 추가 버튼 클릭 시 Mac 오류
안녕하세요.강의듣고 공부중에 Mac OS에서 Windows에서 나지 않던 위와 같은 오류가 나서 문의드립니다.서로이웃 신청 버튼 클릭 시 .click() 블로그 접속 불가라는 탭이 하나 생성되는데요. 이유를 알 수 있을까요?감사합니다.