1, 2, 3단계에 걸친
네이버 블로그 이웃추가 자동화입니다.
구현내용
flow
- 네이버 로그인 자동화
- 모바일 페이지 검색후 뷰탭으로 이동
- 검색 옵션은 블로그, 최신순 쿼리 주소
- 첫번째 포스팅 블로그 아이디 클릭
- 이웃 추가 버튼 클릭(가능할때만 - 이미 이웃인 상태, 이웃 받지 않을 경우 불가능)
- 서로 이웃 버튼 클릭(서로 이웃 신청 받지 않을 경우 불가능)
- 이웃 신청 멘트 기존의 것 삭제 후 새로운 멘트 작성
- 확인 클릭
1단계
- 1명 자동으로 이웃 추가
2단계
- 처음 로딩된 페이지 내 모든 이웃 자동으로 이웃 추가
3단계
- n명 만큼 자동으로 이웃 추가
1단계
- try, except 구문으로 예외 처리하는 이유: (서로)이웃추가 금지로 이웃추가가 안되는 경우를 처리해야 함
- 이웃추가 버튼, 서로이웃추가 버튼 클릭이 안될 경우이므로 이 상단에 try 위치 시킴
#셀레니움 기본설정
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager #크롬 드라이버 자동 업데이트
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys #textarea 입력 삭제
#자동입력 방지 문자 알림창 방지 위해 3가지 import
import time
import pyautogui
import pyperclip
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.implicitly_wait(5) #사이트 로딩시간 5초 기다림
driver.maximize_window() #화면 최대화(꽉차게)
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com") #웹페이지 해당 주소 이동
id = driver.find_element(By.CSS_SELECTOR, '#id') #아이디 입력창
id.click()
#id.send_keys('네이버 아이디') - 아래 코드로 변경
pyperclip.copy('아이디')
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
pw = driver.find_element(By.CSS_SELECTOR, '#pw') #아이디 입력창
pw.click()
#pw.send_keys('네이버 비밀번호') - 아래 코드로 변경
pyperclip.copy('비번')
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, '.btn_login').click()
time.sleep(1)
#키워드: 육아
search_url = 'https://m.search.naver.com/search.naver?where=m_blog&query=%EC%9C%A1%EC%95%84&sm=mtb_viw.blog&nso=so%3Add%2Cp%3Aall'
driver.get(search_url)
time.sleep(1)
#블로거 클릭
driver.find_element(By.CSS_SELECTOR, '.sub_txt.sub_name').click()
time.sleep(1)
try:
#이웃 추가 클릭
driver.find_element(By.CSS_SELECTOR, '.link__RsHMX.add_buddy_btn__oGR_B').click()
time.sleep(1)
#서로이웃추가 클릭
driver.find_element(By.CSS_SELECTOR, '#bothBuddyRadio').click()
#이웃 추가 메시지 전송
msg = '관심 분야가 같아 이웃 신청합니다. 반갑습니다.'
textarea = driver.find_element(By.CSS_SELECTOR, '.textarea_t1')
textarea.send_keys(Keys.CONTROL, 'a') #전체선택
time.sleep(1)
textarea.send_keys(Keys.DELETE) #삭제
time.sleep(1)
textarea.send_keys(msg) #메시지 입력
driver.find_element(By.CSS_SELECTOR, '.btn_ok').click()
except:
pass #아무것도 실행 안함
2단계
#셀레니움 기본설정
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager #크롬 드라이버 자동 업데이트
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys #textarea 입력 삭제
#자동입력 방지 문자 알림창 방지 위해 3가지 import
import time
import pyautogui
import pyperclip
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.implicitly_wait(5) #사이트 로딩시간 5초 기다림
driver.maximize_window() #화면 최대화(꽉차게)
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com") #웹페이지 해당 주소 이동
id = driver.find_element(By.CSS_SELECTOR, '#id') #아이디 입력창
id.click()
#id.send_keys('네이버 아이디') - 아래 코드로 변경
pyperclip.copy('아이디')
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
pw = driver.find_element(By.CSS_SELECTOR, '#pw') #아이디 입력창
pw.click()
#pw.send_keys('네이버 비밀번호') - 아래 코드로 변경
pyperclip.copy('비번')
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, '.btn_login').click()
time.sleep(1)
#키워드: 육아
search_url = 'https://m.search.naver.com/search.naver?where=m_blog&query=%EC%9C%A1%EC%95%84&sm=mtb_viw.blog&nso=so%3Add%2Cp%3Aall'
driver.get(search_url)
time.sleep(1)
#전체 페이지 내 블로거들
ids = driver.find_elements(By.CSS_SELECTOR, '.sub_txt.sub_name')
time.sleep(1)
for id in ids:
#블로거 클릭
# id.click()
# time.sleep(1)
#새창으로 열고 드라이버 전환 안하면 stale element reference: element is not attached to the page document
#블로거 클릭시 다른 페이지로 이동되기 때문에 url이 바뀌어서 id.click()를 못함
#해당 id의 페이지를 새창으로 열기
id.send_keys(Keys.CONTROL + '\n')
#새창으로 드라이버 전환
all_windows = driver.window_handles #드라이버가 열린 모든 창 가지고 옴
driver.switch_to.window(all_windows[1]) #드라이버가 제어하는 윈도우 설정(all_windows[1] 새창 (all_windows[0] 기존창
time.sleep(2)
try:
#이웃 추가 클릭
driver.find_element(By.CSS_SELECTOR, '.link__RsHMX.add_buddy_btn__oGR_B').click()
time.sleep(1)
#서로이웃추가 클릭
driver.find_element(By.CSS_SELECTOR, '#bothBuddyRadio').click()
#이웃 추가 메시지 전송
msg = '관심 분야가 같아 이웃 신청합니다. 반갑습니다.'
textarea = driver.find_element(By.CSS_SELECTOR, '.textarea_t1')
textarea.send_keys(Keys.CONTROL, 'a') #전체선택
time.sleep(1)
textarea.send_keys(Keys.DELETE) #삭제
time.sleep(1)
textarea.send_keys(msg) #메시지 입력
driver.find_element(By.CSS_SELECTOR, '.btn_ok').click()
except:
pass #아무것도 실행 안함
#새창 닫기
driver.close()
#기존 창으로 드라이버 전환
driver.switch_to.window(all_windows[0])
3단계
- 구조상 페이지별 페이지번호를 클릭하는 것이 아니라 무한스크롤로 이웃을 클릭하면 아래 스크롤이 내려가는 타입
- 필요한 것은 페이지 개수가 아니라 클릭한 총 이웃 신청 개수
- 필요한 변수 정의: 총 이웃 신청 개수, 현재 이웃 신청 개수, 현재 블로그 글번호
- 2단계의 for id in ids를 삭제하고, id 찾는 방법은 현재 블로그 글번호로 찾기
- while문으로 반복문 사용
#셀레니움 기본설정
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager #크롬 드라이버 자동 업데이트
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys #textarea 입력 삭제
#자동입력 방지 문자 알림창 방지 위해 3가지 import
import time
import pyautogui
import pyperclip
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.implicitly_wait(5) #사이트 로딩시간 5초 기다림
driver.maximize_window() #화면 최대화(꽉차게)
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com") #웹페이지 해당 주소 이동
id = driver.find_element(By.CSS_SELECTOR, '#id') #아이디 입력창
id.click()
#id.send_keys('네이버 아이디') - 아래 코드로 변경
pyperclip.copy('아이디')
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
pw = driver.find_element(By.CSS_SELECTOR, '#pw') #아이디 입력창
pw.click()
#pw.send_keys('네이버 비밀번호') - 아래 코드로 변경
pyperclip.copy('비번')
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, '.btn_login').click()
time.sleep(1)
#키워드: 육아
search_url = 'https://m.search.naver.com/search.naver?where=m_blog&query=%EC%9C%A1%EC%95%84%EC%9D%BC%EA%B8%B0&sm=mtb_viw.blog&nso=so%3Add%2Cp%3Aall'
driver.get(search_url)
time.sleep(1)
n = 10 #총 이웃신청 개수
count = 0 #현재 이웃 신청개수
index = 0 #현재 블로그 글 번호
while count < n: #count가 n가 같을때 false
#전체 페이지 내 블로거들
ids = driver.find_elements(By.CSS_SELECTOR, '.sub_txt.sub_name')
#현재 블로그 글 index에 맞는 아이디 찾기
id = ids[index]
#새창으로 열기
id.send_keys(Keys.CONTROL + '\n')
#새창으로 드라이버 전환
all_windows = driver.window_handles #드라이버가 열린 모든 창 가지고 옴
driver.switch_to.window(all_windows[1]) #드라이버가 제어하는 윈도우 설정(all_windows[1] 새창 (all_windows[0] 기존창
time.sleep(2)
try:
#이웃 추가 클릭
driver.find_element(By.CSS_SELECTOR, '.link__RsHMX.add_buddy_btn__oGR_B').click()
time.sleep(1)
#서로이웃추가 클릭
driver.find_element(By.CSS_SELECTOR, '#bothBuddyRadio').click()
#이웃 추가 메시지 전송
msg = '관심 분야가 같아 이웃 신청합니다. 반갑습니다.'
textarea = driver.find_element(By.CSS_SELECTOR, '.textarea_t1')
textarea.send_keys(Keys.CONTROL, 'a') #전체선택
time.sleep(1)
textarea.send_keys(Keys.DELETE) #삭제
time.sleep(1)
textarea.send_keys(msg) #메시지 입력
driver.find_element(By.CSS_SELECTOR, '.btn_ok').click()
count = count + 1 #서로이웃 신청개수 증가
except:
pass #아무것도 실행 안함
#새창 닫기
driver.close()
#기존 창으로 드라이버 전환
driver.switch_to.window(all_windows[0])
index = index + 1 #현재 블로그 글번호 증가
반응형
'개발 > Python' 카테고리의 다른 글
[py] 사이트 로그인 방법 (ft. 보안 처리 유무) (0) | 2022.10.26 |
---|---|
[py] 인스타그램 좋아요 자동화 (0) | 2022.10.24 |
[py] 파이썬 gui (ft. pyqt5 설치, 기본 세팅, Qt designer 설치) (0) | 2022.10.08 |
[py] 네이버 연관검색어 결과 크롤링 (0) | 2022.10.07 |
[py] 크롤링 데이터 엑셀에 저장 (0) | 2022.10.05 |
댓글