42,900원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
로긴할 때 폰으로 보안코드 보낸거 입력하라는거요..
로긴할 때 폰으로 보안코드 보낸거 입력하라는거요..정보 저장하고 신뢰하는 기기로 설정해서 수동 로긴을 해도다시 프로그램으로 로긴 하려하면 또 보안코드 입력하라고 떠서로긴부터 막히는데 방법 없을까요?
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
insta_mobile.py 링크만 무한루프 뜹니다. 왜 그런가요?
def insta_mobile_work(device, max_work): links = read_links() print(links) cnt = 1 for link in links: if cnt >= max_work: print(link) print("이제 작업 종료하겠습니다") break try: visited_links = [] # 이미 좋아요, 댓글, 팔로우를 신청한 링크 리스트 with open('visited.txt', 'r') as f: while True: line = f.readline() if not line: break _link = line.rstrip() visited_links.append(_link) if link in visited_links: print("이미 방문한 링크입니다.") continue print(f"{cnt} 번째 링크 방문 {link}") # link = link.replace("https://","") device.press('home') device.open_url(link) time.sleep(0.2) if device(text="작업을 수행할 때 사용하는 애플리케이션").exists(timeout=2): # 삭제되었거나, 잘못된 URL 저장된 경우에 continue continue ''' visited_account check 목표 : 최대 3회까지 계정 방문하는 기능 ''' visited_accounts = [] with open('./visited_account.txt', "r") as f: while True: line = f.readline() if not line: break account = line.rstrip() visited_accounts.append(account) # 몇 번 방문했는지 정보 획득 account_id = device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").get_text() visited_count = visited_accounts.count(account_id) if visited_count >= 3: # 3회 이상 방문일 때는 다음 링크를 방문하도록 한다 # continue가 실행되면 여기 밑에있는 코드가 실행이 안됨 (for 문 안에서 사용가능) continue ''' 1. 좋아요 누르기 - 단, 좋아요가 이미 눌러져 있으면 Pass ''' # 좋아요 버튼 나타나는것 기준으로 5초까지 대기 if not device(resourceId="com.instagram.android:id/row_feed_button_like").exists(timeout=3): device.swipe_ext("up", scale=0.75) time.sleep(3) alreadyLiked = False if device(resourceId="com.instagram.android:id/row_feed_button_like").exists( timeout=5): # 만약 ,좋아요 버튼이 안 눌러져있으면 좋아요 버튼을 누른다 if device(resourceId="com.instagram.android:id/row_feed_button_like", selected=False): device(resourceId="com.instagram.android:id/row_feed_button_like").click() time.sleep(1) if check_bot_detection(device): print("[봇 탐지] - 좋아요 시도 실패") raise Exception("[봇 탐지] - 좋아요 시도 실패") else: alreadyLiked = True time.sleep(3) # ''' # 2. 댓글 달기 - 랜덤 멘트를 미리 작성해놓고, 랜덤으로 뽑아서 댓글 달기''' # if not alreadyLiked: # device(resourceId="com.instagram.android:id/row_feed_button_comment").click() # time.sleep(3) # # 기본 키보드가 활성화 되어있는 경우 back버튼을 눌러줌 # if device(resourceId="com.samsung.android.honeyboard:id/bee_item_icon").exists(): # device.press('back') # time.sleep(1) # if not device(text="이 게시물에 대한 댓글 기능이 제한되었습니다.").exists(): # print("커멘트 작성 가능 exists") # device(resourceId="com.instagram.android:id/layout_comment_thread_edittext").click() # # 실제 사람이 작성하는 것처럼 문장 사이의 타이핑 딜레이가 들어감 # comments = ["♡", "❤️", "❤️❤️", "♥"] # comment = random.choice(comments) # for word in comment: # device.send_keys(word) # time.sleep(random.uniform(0.03, 0.08)) # print("댓글 작성 완료") # time.sleep(3) # if device( # resourceId="com.instagram.android:id/layout_comment_thread_post_button_click_area").exists(): # device( # resourceId="com.instagram.android:id/layout_comment_thread_post_button_click_area").click() # elif device(resourceId="com.instagram.android:id/layout_comment_thread_post_button").exists(): # device(resourceId="com.instagram.android:id/layout_comment_thread_post_button").click() # time.sleep(1) # if check_bot_detection(device): # print("[봇 탐지] - 댓글 달기 시도 실패") # raise Exception("[봇 탐지] - 댓글 달기 시도 실패") # print("게시 버튼 꾸욱.") # time.sleep(2) # device.press('back') # time.sleep(2) # device.press('back') # else: # device.press('back') # time.sleep(3) # 방문 1회 추가 ! with open('./visited_account.txt', "a") as f: f.write(f"{account_id}\n") # 3. 팔로우 신청 - 단, 이미 팔로잉 상태면 Pass # 사진 사이즈가 너무 크면, 위로 스와이프 해줘야함 device.swipe_ext("down", scale=0.8) time.sleep(3) account_ids = [] # 이미 팔로우를 신청한 계정 리스트 with open('accounts.txt', "r") as f: while True: line = f.readline() if not line: break account_id = line.rstrip() account_ids.append(account_id) if not device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").exists(): device.press('back') time.sleep(1) target_account_id = device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").get_text() # 딱 1번만 팔로우 하겠다. if not target_account_id in account_ids: # 팔로우할 유저의 계정을 기록 with open('accounts.txt', "a") as f: account_id = device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").get_text() f.write(f"{account_id}\n") device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").click() time.sleep(3) if device(description="맞팔로우 하기", text="맞팔로우").exists(): device(description="맞팔로우 하기", text="맞팔로우").click() elif device(text="팔로우", className="android.widget.Button"): device(text="팔로우", className="android.widget.Button").click() else: # 이미 맞 팔로우가 되어 있으므로 실행시키지 않아도 됨 pass time.sleep(1) if check_bot_detection(device): print("[봇 탐지] - 팔로우, 맞팔로우 신청 시도 실패") raise Exception("[봇 탐지] - 팔로우, 맞팔로우 신청 시도 실패") time.sleep(2) device.press("back") time.sleep(2) device.press("back") time.sleep(3) else: print("이미 팔로우된 계정입니다") cnt += 1 random_time = random.randrange(60, 90) print(random_time, '초만큼 대기하겠습니다') time.sleep(random_time) '좋아요, 팔로우, 댓글 작성까지 완료된 게시글' with open('visited.txt', 'a') as f: f.write(f"{link}\n") except: pass 1 번째 링크 방문 https://www.instagram.com/p/C2DUpJJBWI1/1 번째 링크 방문 https://www.instagram.com/p/C3SMeJSyIRC/1 번째 링크 방문 https://www.instagram.com/p/C3fDCYiM4gt/1 번째 링크 방문 https://www.instagram.com/p/C2hjVjmxPEg/왜그런가요?
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
폰에 atx라는 자동차 모양 아이콘의 앱이 설치되었어요.
폰에 atx라는 자동차 모양 아이콘의 앱이 설치되었어요.얘가 전화 허용이라는 권한을 요청하기도 했고폰 상단 알림창에 계속 uiautomator 이라는 이름과 ip주소가 써진 알람을 계속 보내요 . 알람을 지우고 몇 분 뒤에 보면 또 알람창에 떠 있고. 이 앱을 폰에 계속 설치되어 있는 상태로 있어야 하는지 궁금합니다. 앱 들어가보면 weditor처럼 중국어(?)로 써져 있어서 불안해서요.
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
팔로워 리스트 추출완료 count 관련 문의드립니다.
main.py에 count 10을 했는데 계속 진행되고 있습니다.keyword_list = ["식당인테리어","식당"] for keyword in keyword_list: #해시태그 띄어쓰기 사용 불가, 필터링 기능 keyword = keyword.replace(" ","") count = 10 insta_web.insta_web_work(driver,keyword,count) insta_mobile.insta_mobile_work(device,30) print("[작업 완료] - 자동화 프로그램 동작이 완료되었습니다.") 그리고 파일이 저장이 되지 않습니다.뭐가 문제일까요?테스트용으로 count 10을 했는데 말입니다.저장되지 않는 것 같습니다. 포스팅 링크 추출 완료팔로워 리스트 추출 완료 70 - 1팔로워 리스트 추출 완료 69 - 2팔로워 리스트 추출 완료 56 -3팔로워 리스트 추출 완료 59 -4팔로워 리스트 추출 완료 52 -5[에러] 팔로워 버튼 클릭 에러팔로워 리스트 추출 완료 0팔로워 리스트 추출 완료 72 -6팔로워 리스트 추출 완료 60 -7팔로워 리스트 추출 완료 64 -8팔로워 리스트 추출 완료 54 -9팔로워 리스트 추출 완료 30 -10팔로워 리스트 추출 완료 71 -11
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
휴대폰 로그인 패턴
안녕하세요. 강의 잘듣고 있습니다. uiautomator2에서 핸드폰 초기 lock화면의 패턴을 입력하는 방법은 지원하지 않나요. 아니면 다른 식의 방법이 있는것인가요확인한번 부탁드립니다.
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
리스트 추출만 반복
선생님 강의는 잘 듣고있습니다ㅠ제가 아직 초보여서 그런가 이해를 못한건가 싶은데 1.2이후로 추가된 완성본 코드를 실행하면 이런식으로 하루종일 팔로워 리스트만 추출을 하고 있습니다... links.txt 작성완료가 뜨고 끝나야 된다고 생각하는데 팔로워 리스트 추출만 몇시간 켜놔도 계속 추출만하다가 중간에 에러가 뜨면 멈춰버리니 진행이 안되는 상황인데 이거 카운트를 설정해서 몇개만 진행되게 하거나 안될까요? 원래 팔로워 리스트만 계속 추출하는게 맞을까요? 에러뜨고 멈추면 links.txt에 추가도 안되고 진행이 안되서요 한두시간 켜놔도 그렇습니다.글 올리고 좀 더 해보니 포스팅 링크 추출하고 그거만큼 링크를 방문해서 팔로워 리스트를 추출하는거 같은데 자꾸 포스팅 링크 갯수보다 더많은 링크를 방문해서 팔로워 리스트를 추출하려고 시도하는데 혹시 포스팅 링크를 방문하면서 추출한 팔로워 리스트도 또 방문해서 추출을 시도하나요?? 그런식으로 무한루프가 돌아가거나 갯수가 많아져서 오래걸리는거같은데 문제는 중간에 무조건 에러가 한번은 생겨서 끊겨버리는거 같아서요팔로워 리스트 추출 부분을 제거하니 정상작동하네요.. 흠
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
해시태그 검색 후 최근게시물 없음
해시태그 검색 후 인기 게시물만 있고최근 게시물은 보이지가 않는데어떻게 해야되나요?
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
에러 확인 좀 부탁드립니다.
에러 확인 좀 부탁 드립니다.
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
해시태그 검색 결과가 수강 내용과 달라서 올려주신 최종 코드가 적용되지 않고 오류가 납니다.
안녕하세요! 인프런에서 [인스타그램 휴대폰, 웹 자동화 프로그램 개발]을 수강한 사람입니다.본 강의를 이용해서 자동화 프로그램을 개발하려고 하는데, insta_web.py의 로직 수행 중 오류가 발생하여 문의드립니다.현재 문제가 생긴 부분은 다음과 같습니다.1. insta_web_hashtag_search 함수 부분 : driver.get(f"https://www.instagram.com/explore/tags/{keyword}/") 를 수행하면 인기 게시물이 28개만 뜹니다. 따라서 28개 이상의 링크를 추출하기가 어려운 것으로 보입니다. 수강생들이 이전에 질문한 글을 찾아봤는데 똑같은 질문을 하신 분이 계시더라고요.AI 인턴이 남긴 댓글을 확인하고 설정을 변경하려고 했는데 현재 인스타그램 웹사이트에서는 검색 결과를 최신 게시물로 변경하는 필터를 제공하지 않는 것 같습니다.이 부분에 대한 피드백을 주시면 감사하겠습니다.2. insta_web_link_extract 함수 부분 : WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, all_posting_sel)))에서 오류가 나서 넘어가지 않습니다. 1에서의 변경점때문에 셀렉터를 찾지 못해서 이런 일이 발생한 것 같다고 생각하는데 혼자 봐서는 잘 모르겠네요...오류 내용은 다음과 같습니다.Traceback (most recent call last): File "C:\Users\user\Desktop\insta_auto_sample\main.py", line 23, in <module> insta_web.insta_web_work(driver, keyword, count) File "C:\Users\user\Desktop\insta_auto_sample\insta_web.py", line 115, in insta_web_work insta_web_link_extract(driver, count) File "C:\Users\user\Desktop\insta_auto_sample\insta_web.py", line 73, in insta_web_link_extract WebDriverWait(driver, 10).until(EC.presence_of_element_located( File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: Stacktrace: GetHandleVerifier [0x00007FF722D552A2+57122] (No symbol) [0x00007FF722CCEA92] (No symbol) [0x00007FF722B9E3AB] (No symbol) [0x00007FF722BD7D3E] (No symbol) [0x00007FF722BD7E2C] (No symbol) [0x00007FF722C10B67] (No symbol) [0x00007FF722BF701F] (No symbol) [0x00007FF722C0EB82] (No symbol) [0x00007FF722BF6DB3] (No symbol) [0x00007FF722BCD2B1] (No symbol) [0x00007FF722BCE494] GetHandleVerifier [0x00007FF722FFEF82+2849794] GetHandleVerifier [0x00007FF723051D24+3189156] GetHandleVerifier [0x00007FF72304ACAF+3160367] GetHandleVerifier [0x00007FF722DE6D06+653702] (No symbol) [0x00007FF722CDA208] (No symbol) [0x00007FF722CD62C4] (No symbol) [0x00007FF722CD63F6] (No symbol) [0x00007FF722CC67A3] BaseThreadInitThunk [0x00007FFE73ED7614+20] RtlUserThreadStart [0x00007FFE759E26F1+33] 전체 코드도 첨부합니다.# insta_web.py import time import data import chromedriver_autoinstaller chromedriver_autoinstaller.install() from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains import pyperclip def insta_web_login(driver): try: driver.get("https://www.instagram.com/") id_selector = "#loginForm > div > div:nth-child(1) > div > label > input" WebDriverWait(driver, 10).until(EC.presence_of_element_located( (By.CSS_SELECTOR, id_selector) )) # 인스타그램 로그인 id_input = driver.find_element(By.CSS_SELECTOR, id_selector) id_input.click() time.sleep(0.3) pyperclip.copy(data.id) actions = ActionChains(driver) actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() time.sleep(0.5) pw_selector = "#loginForm > div > div:nth-child(2) > div > label > input" pw_input = driver.find_element(By.CSS_SELECTOR, pw_selector) pw_input.click() time.sleep(0.3) actions = ActionChains(driver) pyperclip.copy(data.pw) actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() time.sleep(0.5) login_btn_selector = "#loginForm > div > div:nth-child(3) > button" login_btn = driver.find_element(By.CSS_SELECTOR, login_btn_selector) login_btn.click() except Exception as e: print(e) print('[에러] insta_web_login > 로그인 에러 발생!') def insta_web_hashtag_search(driver, keyword): try: # 인스타그램 해시태그 검색 시작 search_selector = "#react-root > section > nav > div._8MQSO.Cx7Bp > div > div > div.QY4Ed.P0xOK > input" # WebDriverWait(driver, 10).until(EC.presence_of_element_located( # (By.CSS_SELECTOR, search_selector) # )) time.sleep(3) from urllib import parse # keyword = "고양이인스타" # keyword = parse.quote(keyword) driver.get(f"https://www.instagram.com/explore/tags/{keyword}/") except Exception as e: print(e) print("[에러] insta_web_hashtag_search > 해시태그 검색중 에러 발생!") def insta_web_link_extract(driver, count=100): all_posting_sel = "div[id^='mount_0_0'] > div > div > div > div > div > div > div > div > div > section > main > article > div:nth-child(3) > div" WebDriverWait(driver, 10).until(EC.presence_of_element_located( (By.CSS_SELECTOR, all_posting_sel) )) print("💙💙") all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel) print("💙💙💙") ''' 목표 링크 n개 추출하기''' links = [] while len(links) < count : try: # 6번 스크롤 내리기(충분히 포스팅 개수가 쌓일만큼 스크롤 하기) for _ in range(6): driver.execute_script("window.scrollBy(0,600);") time.sleep(0.3) # 피드의 href 추출 all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel) post_links = all_posting_box.find_elements(By.TAG_NAME, "a") for eachLink in post_links: # eachLink # Element Class link = eachLink.get_attribute('href') links.append(link) # 중복 제거 links = set(links) links = list(links) except Exception as e: print(e) print("[에러] insta_web_link_extract > while 에러 발생!") with open('links.txt', "a") as f: for link in links: print(link) f.write(f"{link}\n") def insta_web_work(driver, keyword, count): insta_web_login(driver) insta_web_hashtag_search(driver, keyword) insta_web_link_extract(driver, count)
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
아직 질문 해결이 되지 못했습니다.
하단에 제 이름으로 질문한 "https://www.instagram.com/explore/tags/{keyword}")로 접속을 해보면" 문제 해결이 아직 되지 못한 상황입니다. ai 인턴님이 답변 하실 사안은 아닌 것 같고 강사님께서 답을 주셔야 할것 같습니다. 제 강의 가능한 기간이 9.10일입니다. 저번 질문도 이 질문과 같은 질문이었는데 아직 해결이 되지 못하였습니다. 강사님께서 직접 확인을 하도록 해서 기간 안에 해결을 해 주세요
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
https://www.instagram.com/explore/tags/{keyword} 이상해요
선생님께서 알려주신 "https://www.instagram.com/explore/tags/{keyword}")로 접속을 해보면 이렇게 강의 화면에는 나오는데 저의 경우는 "최근사진" 그룹이 나오지 않더라구요. 제 능력으론 더 이상 강의 진행을 못하고 있는 상황입니다. 바쁘시겠지만 돌파구를 찾아 주시면 감사하겠습니다.
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
윈도우와 맥 환경이 다른 점이 많아서 초기 환경설정부터 막혀있습니다 ㅜ
selenium 이랑 chromedriver_autoinstaller 도 다 인스톨되어있는데 왜 저렇게 노란줄이 나오는걸까요?reportMissingImports [부울 또는 문자열, 선택 사항]: 가져온 Python 파일 또는 유형 스텁 파일이 없는 가져오기에 대한 진단을 생성하거나 억제합니다. 이 설정의 기본값은 입니다 "error". 라는 오류라고 합니다....
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
인스타 검색 부분이 변경 되어서...
안녕하세요. 많이 배우고 있습니다.과정중에 인스타 검색 부분에서 변경이 되어 있습니다.그래서 그런지 에러가 걸리더라구요. 확인 부탁 드립니다.첨부 이미지 1번을 클릭해야 2번 검색창이 열리는데1번 검색이미지 클릭을 할수가 없습니다. iframe 때문인지 제 능력 밖입니다. 조언 부탁 드려요.
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
Web 태그 접속후, 최근 사진 없습니다.?
Web 태그 접속후, 최근 사진 영역이 없습니다.
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
계속 안됩니다..
actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() # id_input.send_keys(data.id) time.sleep(5) pw_selector = "#loginForm > div > div:nth-child(2) > div > label > input" pw_input = driver.find_element(By.CSS_SELECTOR,pw_selector) pw_input.click() time.sleep(5) actions = ActionChains(driver) # ctrl + c 동작 pyperclip.copy(data.pw) # ctrl + v 동작 actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
insta_web 질문 있습니다!
안녕하세요! 선생님 혹시 에러가 나는데 봐주실 수 있을까요 ㅠㅠ 기본적으로 로그인부터 안됩니다 ㅠㅠ에러DevTools listening on ws://127.0.0.1:51221/devtools/browser/d2c4970f-37a8-4257-ad60-95407a9b0e45cannot access local variable 'actions' where it is not associated with a value[에러] insta_web_login > 에러 발생Traceback (most recent call last): File "c:\Users\문소희\Desktop\project\insta_auto\main.py", line 25, in <module> insta_web.insta_web_work(driver,keyword,count) File "c:\Users\문소희\Desktop\project\insta_auto\insta_web.py", line 117, in insta_web_work insta_web_link_extract(driver,count) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\Users\문소희\Desktop\project\insta_auto\insta_web.py", line 75, in insta_web_link_extract WebDriverWait(driver, 10).until(EC.presence_of_element_located( File "C:\Users\문소희\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until raise TimeoutException(message, screen, stacktrace)selenium.common.exceptions.TimeoutException: Message:Stacktrace:Backtrace: GetHandleVerifier [0x01086E73+48323] (No symbol) [0x01019661] (No symbol) [0x00F25308] (No symbol) [0x00F50B45] (No symbol) [0x00F50CDB] (No symbol) [0x00F7E3D2] (No symbol) [0x00F6A924] (No symbol) [0x00F7CAC2] (No symbol) [0x00F6A6D6] (No symbol) [0x00F4847C] (No symbol) [0x00F4957D] GetHandleVerifier [0x012EFD5D+2575277] GetHandleVerifier [0x0132F86E+2836158] GetHandleVerifier [0x013296DC+2811180] GetHandleVerifier [0x011141B0+626688] (No symbol) [0x0102314C] (No symbol) [0x0101F4B8] (No symbol) [0x0101F59B] (No symbol) [0x010121B7] BaseThreadInitThunk [0x76A100C9+25] RtlGetAppContainerNamedObjectPath [0x77907B4E+286] RtlGetAppContainerNamedObjectPath [0x77907B1E+238] mainimport time import uiautomator2 as u2 from selenium import webdriver import insta_web import insta_mobile serial = "ce031713db01712d02" device = u2.connect(serial) options = webdriver.ChromeOptions() options.add_argument('--user-agent= Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36') options.add_argument("--disanble-logging") options.add_experimental_option("useAutomationExtension",False) options.add_experimental_option('excludeSwitches',["enable-auttomation"]) driver = webdriver.Chrome(options=options) keyword_list = ["골린이", "골프사랑", "골프중독","골프스윙", "골프레슨"] for keyword in keyword_list: keyword = keyword.replace(" ","") count = 1000 insta_web.insta_web_work(driver,keyword,count) insta_mobile.insta_mobile_work(device) insta_webimport time, data import chromedriver_autoinstaller chromedriver_autoinstaller.install() from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains import pyperclip def insta_web_login(driver): try: driver.get("https://www.instagram.com/") # time.sleep(2) id_selector = "#loginForm > div > div:nth-child(1) > div > label > input" WebDriverWait(driver, 10).until(EC.presence_of_element_located( (By.CSS_SELECTOR, id_selector) )) id_input = driver.find_element(By.CSS_SELECTOR,id_selector) id_input.click() time.sleep(5) # ctrl + c 동작 pyperclip.copy(data.id) # ctrl + v 동작 actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() # id_input.send_keys(data.id) time.sleep(5) pw_selector = "#loginForm > div > div:nth-child(2) > div > label > input" pw_input = driver.find_element(By.CSS_SELECTOR,pw_selector) pw_input.click() time.sleep(5) actions = ActionChains(driver) # ctrl + c 동작 pyperclip.copy(data.pw) # ctrl + v 동작 actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() time.sleep(5) login_btn_selector = "#loginForm > div > div:nth-child(3) > button" login_btn = driver.find_element(By.CSS_SELECTOR, login_btn_selector) login_btn.click(5) except Exception as e: print(e) print('[에러] insta_web_login > 에러 발생') def insta_web_hashtag_search(driver,keyword): try: time.sleep(50) from urllib import parse keyword = "골프사랑" keyword = parse.quote(keyword) driver.get(f"https://www.instagram.com/explore/tags/{keyword}/") except Exception as e: print(e) print["[에러] insta_web_hashtag_search > 해시태그 검색중 에러 발생"] def insta_web_link_extract(driver, count=100): time.sleep(5) all_posting_sel = "div[id^='mount_0_0'] > div > div > div.x9f619.x1n2onr6.x1ja2u2z > div > div > div > div.x78zum5.xdt5ytf.x10cihs4.x1t2pt76.x1n2onr6.x1ja2u2z > div.x9f619.xnz67gz.x78zum5.x168nmei.x13lgxp2.x5pf9jr.xo71vjh.x1uhb9sk.x1plvlek.xryxfnj.x1c4vz4f.x2lah0s.x1q0g3np.xqjyukv.x1qjc9v5.x1oa3qoh.x1qughib > div.xh8yej3.x1gryazu.x10o80wk.x14k21rp.x1porb0y.x17snn68.x6osk4m > section > main > article > div:nth-child(3) > div" WebDriverWait(driver, 10).until(EC.presence_of_element_located( (By.CSS_SELECTOR, all_posting_sel) )) all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel) time.sleep(5) '''링크 100개 추출''' links = [] while len(links) < count : try: for _ in range(6): driver.execute_script("window.scrollBy(0,600);") time.sleep(5) all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel) posk_links = all_posting_box.find_elements(By.TAG_NAME,"a") for eachLink in posk_links: link = eachLink.get_attribute('href') links.append(link) links = set(links) links = list(links) except Exception as e: print(e) print("insta_web_link_extract > while 에러 발생") with open('links.txt',"a") as f: for link in links: # print(link) f.write(f"{link}\n") def insta_web_work(driver,keyword,count): insta_web_login(driver) insta_web_hashtag_search(driver, keyword) insta_web_link_extract(driver, count) insta_ mobileimport time, data import chromedriver_autoinstaller chromedriver_autoinstaller.install() from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains import pyperclip def insta_web_login(driver): try: driver.get("https://www.instagram.com/") # time.sleep(2) id_selector = "#loginForm > div > div:nth-child(1) > div > label > input" WebDriverWait(driver, 10).until(EC.presence_of_element_located( (By.CSS_SELECTOR, id_selector) )) id_input = driver.find_element(By.CSS_SELECTOR,id_selector) id_input.click() time.sleep(5) # ctrl + c 동작 pyperclip.copy(data.id) # ctrl + v 동작 actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() # id_input.send_keys(data.id) time.sleep(5) pw_selector = "#loginForm > div > div:nth-child(2) > div > label > input" pw_input = driver.find_element(By.CSS_SELECTOR,pw_selector) pw_input.click() time.sleep(5) actions = ActionChains(driver) # ctrl + c 동작 pyperclip.copy(data.pw) # ctrl + v 동작 actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() time.sleep(5) login_btn_selector = "#loginForm > div > div:nth-child(3) > button" login_btn = driver.find_element(By.CSS_SELECTOR, login_btn_selector) login_btn.click(5) except Exception as e: print(e) print('[에러] insta_web_login > 에러 발생') def insta_web_hashtag_search(driver,keyword): try: time.sleep(50) from urllib import parse keyword = "골프사랑" keyword = parse.quote(keyword) driver.get(f"https://www.instagram.com/explore/tags/{keyword}/") except Exception as e: print(e) print["[에러] insta_web_hashtag_search > 해시태그 검색중 에러 발생"] def insta_web_link_extract(driver, count=100): time.sleep(5) all_posting_sel = "div[id^='mount_0_0'] > div > div > div.x9f619.x1n2onr6.x1ja2u2z > div > div > div > div.x78zum5.xdt5ytf.x10cihs4.x1t2pt76.x1n2onr6.x1ja2u2z > div.x9f619.xnz67gz.x78zum5.x168nmei.x13lgxp2.x5pf9jr.xo71vjh.x1uhb9sk.x1plvlek.xryxfnj.x1c4vz4f.x2lah0s.x1q0g3np.xqjyukv.x1qjc9v5.x1oa3qoh.x1qughib > div.xh8yej3.x1gryazu.x10o80wk.x14k21rp.x1porb0y.x17snn68.x6osk4m > section > main > article > div:nth-child(3) > div" WebDriverWait(driver, 10).until(EC.presence_of_element_located( (By.CSS_SELECTOR, all_posting_sel) )) all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel) time.sleep(5) '''링크 100개 추출''' links = [] while len(links) < count : try: for _ in range(6): driver.execute_script("window.scrollBy(0,600);") time.sleep(5) all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel) posk_links = all_posting_box.find_elements(By.TAG_NAME,"a") for eachLink in posk_links: link = eachLink.get_attribute('href') links.append(link) links = set(links) links = list(links) except Exception as e: print(e) print("insta_web_link_extract > while 에러 발생") with open('links.txt',"a") as f: for link in links: # print(link) f.write(f"{link}\n") def insta_web_work(driver,keyword,count): insta_web_login(driver) insta_web_hashtag_search(driver, keyword) insta_web_link_extract(driver, count)
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
섹션6-3 '댓글' 질문드립니다!
섹션 6-3에서 for word in "멘트" <<이렇게 돌리면 댓글이 한글자씩 입력하고 작성됩니다.ex) 멘트댓글1 : 멘 댓글2 : 트 if not device(text="이 게시물에 대한 댓글 기능이 제한되었습니다.").exists(): print("커멘드 작성 가능 exists") device(resourceId="com.instagram.android:id/layout_comment_thread_edittext").click() for word in "안녕하세요!": device.send_keys(word) time.sleep(random.uniform(0.03,0.08)) time.sleep(5) device(resourceId="com.instagram.android:id/layout_comment_thread_post_button_click_area").click() time.sleep(2) device.press('back') time.sleep(2) device.press('back') if not device(text="이 게시물에 대한 댓글 기능이 제한되었습니다.").exists(): print("커멘드 작성 가능 exists") device(resourceId="com.instagram.android:id/layout_comment_thread_edittext").click() for word in "안녕하세요!": device.send_keys(word) time.sleep(random.uniform(0.03,0.08)) time.sleep(5) device(resourceId="com.instagram.android:id/layout_comment_thread_post_button_click_area").click() time.sleep(2) device.press('back') time.sleep(2) device.press('back')
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
해시태그 추출
로그인 > 해시태그 검색 까지는 작동되는데... 이후 스크롤부터 링크 추출까지 막혔습니다. 어떤 문제가 있는지 알수 있을까요?---------------------------------------------------------import timeimport chromedriver_autoinstallerchromedriver_autoinstaller.install()from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver import ActionChainsdriver = webdriver.Chrome()driver.get("https://www.instagram.com/")# time.sleep(2)id_selector = "#loginForm > div > div:nth-child(1) > div > label > input"WebDriverWait(driver, 10).until(EC.presence_of_element_located( (By.CSS_SELECTOR, id_selector) ))import mdataid_input = driver.find_element(By.CSS_SELECTOR,id_selector)id_input.send_keys(mdata.id)time.sleep(1)pw_selector = "#loginForm > div > div:nth-child(2) > div > label > input"pw_input = driver.find_element(By.CSS_SELECTOR,pw_selector)pw_input.send_keys(mdata.pw)time.sleep(1)login_btn_selector = "#loginForm > div > div:nth-child(3) > button"login_btn = driver.find_element(By.CSS_SELECTOR, login_btn_selector)login_btn.click()time.sleep(10)from urllib import parsekeyword = "사업가"keyword = parse.quote(keyword)driver.get(f"https://www.instagram.com/explore/tags/{keyword}/")time.sleep(10)all_posting_sel = "div[id^='mount_0_0'} > div > div > div.x9f619.x1n2onr6.x1ja2u2z > div > div > div > div.x78zum5.xdt5ytf.x10cihs4.x1t2pt76.x1n2onr6.x1ja2u2z > div.x9f619.xnz67gz.x78zum5.x168nmei.x13lgxp2.x5pf9jr.xo71vjh.x1uhb9sk.x1plvlek.xryxfnj.x1c4vz4f.x2lah0s.x1q0g3np.xqjyukv.x1qjc9v5.x1oa3qoh.x1qughib > div.xh8yej3.x1gryazu.x10o80wk.x14k21rp.x1porb0y.x17snn68.x6osk4m > section > main > article > div:nth-child(3) > div"time.sleep(3)all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel)time.sleep(3)'''링크 100개 추출'''links = []while len(links) < 100 : for _ in range(6): driver.execute_script("window.scrollBy(0.600);") time.sleep(1) all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel) posk_links = all_posting_box.find_elements(By.TAG_NAME,"a") for eachLink in posk_links: link = eachLink.get_attribute('href') links.append(link) links = set(links) links = list(links) for link in links: print(link)print("******")print(len(links), "개의 링크를 추출")input()------------------------------------------------------DevTools listening on ws://127.0.0.1:50287/devtools/browser/ed0f17f2-033d-4ba2-80b8-8f3d2f886171Traceback (most recent call last): File "c:\Users\문소희\Desktop\project\insta_auto\insta_web.py", line 50, in <module> all_posting_box = driver.find_element(By.CSS_SELECTOR, all_posting_sel) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\문소희\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_element return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\문소희\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute self.error_handler.check_response(response) File "C:\Users\문소희\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response raise exception_class(message, screen, stacktrace)selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified (Session info: chrome=113.0.5672.127)Stacktrace:Backtrace: GetHandleVerifier [0x005C6DF3+48691] (No symbol) [0x00558CC1] (No symbol) [0x00465068] (No symbol) [0x00468401] (No symbol) [0x00469641] (No symbol) [0x004696E0] (No symbol) [0x004900D0] (No symbol) [0x004906AB] (No symbol) [0x004BDD62] (No symbol) [0x004AA314] (No symbol) [0x004BC452] (No symbol) [0x004AA0C6] (No symbol) [0x00487E18] (No symbol) [0x00488F3D] GetHandleVerifier [0x00824EAA+2531050] GetHandleVerifier [0x00864B60+2792352] GetHandleVerifier [0x0085E6EC+2766636] GetHandleVerifier [0x00650820+612448] (No symbol) [0x005625BC] (No symbol) [0x0055E808] (No symbol) [0x0055E8EB] (No symbol) [0x00551C77] BaseThreadInitThunk [0x754900C9+25] RtlGetAppContainerNamedObjectPath [0x772E7B4E+286] RtlGetAppContainerNamedObjectPath [0x772E7B1E+238]
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
인스타그램 로그인 완료 후 검색 부분 (섹션 5 -3)
강의에 보여주시는 부분과 다른 디자인으로 변경되었습니다.비슷한 방법으로 해봐도 도저히 실행되지가 않네요..
- 미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
로그인 이후 발이 묶여서 멈추고 더이상 넘어가지 못하고 있습니다.
안녕하세요 : )강의 넘 잘 듣고 있습니다.몇일째 넘어가지 못하고 있어 이렇게 글을 남김니다.로그인 후 환경이 변경된것 같은데로그인 정보를 저장하시겠어요? 부분은driver.find_element(By.CLASS_NAME, '_acan').click()이걸로 하니 넘어간 것 같은데2번째 뜨는 알림 설정 창은나중에 하기 버튼 클릭을 누르려고 아무리 애를 써도 안되네요 ㅠ driver.find_element(By.CLASS_NAME, '_a9--._a9_1').click()class="_a9-- _a9_1"개발자도구 > Ctrl + F_a9-- _a9_1 이렇게 검색하면 1개를 찾는데_a9--._a9_1 중간에 빈영역에 .을 넣으면 찾지 못하는 문제가 있네요?왜일까요?XPATH, SELECTOR 등을 모두 활용해 봤는데 더 이상 진행이 되지 않습니다.어떻게 하면 될까요?