묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
강의자료 어디서볼까요?
강의자료 어디서 볼까요?강의자료소스자료(github 등)수강내용중에 참고 사이트 등 정보는 댓글로 남겨둔다고 하셨는데 그 댓글들은 어디서 확인할 수 있을까요?확인 부탁드립니다.감사합니다.
-
미해결네이버 카페 DB 추출 프로그램 개발 강의 [selenium]
계정 정보 찾을수가 없어요
로직이 바뀐거 같아서 질문 드립니다 .영상처럼 위에 링크가 떠야되는데 아예 안뜨고<script type="text/javascript">wordBreak($("article_0103378_0"));</script>이런 걸 도저히 찾지 못하겠습니다. 블로그보기로 들어가서 계정아이디 확인하고 개발자도구에서 ctrl+ f 한다음 붙여놔도 아예 안뜨네요중고나라 카페 로직이 바꼈는지 한번 봐주시면 감사하겠습니다
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
선생님이랑 똑같이 적었는데 저는 왜 오류가 날까요?ㅠ
안녕하세요! 차근차근 잘 보고 있습니다.선생님이랑 똑같이 따라하고 있는데 저는 자꾸 에러가 나서요ㅠㅠ".logo_naver"가 없어진거 같아서 다른걸 붙여서 했는데도 오류가 나는데 뭐가 잘못된 걸까요ㅠㅠㅠㅠ답변이 선생님이랑은 다르게 이렇게 나와서요ㅠㅠ똑같이 따라하는데 뭐가 잘못된 건지 모르겠어요ㅠㅠ
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
1강에서 localhost:4000 접속
1강에서http://localhost:4000 연결은윈도우 자체에서 4000번 포트를 열어서 연결하는건가요?설명없이 갑자기 4000번 포트로 연결하니 따라가기가 어렵습니다.
-
해결됨[2024 개정판] 이것이 진짜 엑셀자동화다 - 기본편
네이버 메일 자동화 실습 문의
안녕하세요 네이버 메일 자동화 코드를 실행하면 메일 쓰기 버튼을 계속 찾지 못하고 있어 어떻게 수정하면 될지 문의드립니다.메일함 이동까지는 정상적으로 되고 있으나 메일 쓰기 버튼만 찾지 못하고 있습니다. 코드는 다음과 같습니다.from selenium.webdriver import ChromeOptions from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By import time import pyperclip import pyautogui from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC options = ChromeOptions() options.add_experimental_option("detach", True) driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options) driver.get('https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/') driver.maximize_window() # 화면 최대화 # 아이디 입력창 id = driver.find_element(By.CSS_SELECTOR, '#id') id.click() pyperclip.copy('eooe5173') pyautogui.hotkey('ctrl', 'v') time.sleep(2) # 비밀번호 입력창 passward = driver.find_element(By.CSS_SELECTOR, '#pw') passward.click() pyperclip.copy('ssw471395~') pyautogui.hotkey('ctrl', 'v') time.sleep(2) # 로그인 버튼 driver.find_element(By.CSS_SELECTOR, '#log\.login').click() time.sleep(5) # 메일함으로 이동 mailbox = driver.find_element(By.CSS_SELECTOR,'#shortcutArea > ul > li:nth-child(1) > a').click() time.sleep(5) # 내게 쓰기 버튼 writeme_button =driver.find_element(By.CSS_SELECTOR, '#root > div > nav > div > div.lnb_header > div.lnb_task > a.item.button_write').click() # 메일 제목 입력창 및 입력 mailname = driver.find_element(By.CSS_SELECTOR, '#subject_title').click() pyperclip.copy('안녕하세요') pyautogui.hotkey('ctrl', 'v') time.sleep(5) # 메일 내용 입력창 및 입력 mailinfo = driver.find_element(By.CSS_SELECTOR, '#body > div > div.workseditor-content').click() pyperclip.copy('네이버 메일 자동화입니다.') pyautogui.hotkey('ctrl', 'v') time.sleep(5) # 메일 저장 mailsave = driver.find_element(By.CSS_SELECTOR, '#content > div.mail_toolbar.type_write > div:nth-child(1) > div > button.button_write_task').click() time.sleep(5)에러는 동일하게 다음과 같이 노출되고 있습니다.selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#root > div > nav > div > div.lnb_header > div.lnb_task > a.item.button_write"} (Session info: chrome=123.0.6312.123)Stacktrace: GetHandleVerifier [0x00D14CA3+225091] (No symbol) [0x00C44DF1] (No symbol) [0x00AE9A7A] (No symbol) [0x00B2175B] (No symbol) [0x00B2188B] (No symbol) [0x00B57882] (No symbol) [0x00B3F5A4] (No symbol) [0x00B55CB0] (No symbol) [0x00B3F2F6] (No symbol) [0x00B179B9] (No symbol) [0x00B1879D] sqlite3_dbdata_init [0x01189A43+4064547] sqlite3_dbdata_init [0x0119104A+4094762] sqlite3_dbdata_init [0x0118B948+4072488] sqlite3_dbdata_init [0x00E8C9A9+930953] (No symbol) [0x00C507C4] (No symbol) [0x00C4ACE8] (No symbol) [0x00C4AE11] (No symbol) [0x00C3CA80] BaseThreadInitThunk [0x764EFCC9+25] RtlGetAppContainerNamedObjectPath [0x77DE7C5E+286] RtlGetAppContainerNamedObjectPath [0x77DE7C2E+238]
-
미해결Selenium 기본 과정
소스코드 링크
소스코드 링크가 있다고 하시는데 어디에 있는지 잘 모르겠어요아니면 보기쉽게 강의 마지막에 남겨주시는것도 좋을거같습니다
-
해결됨파이썬으로 나만의 블로그 자동화 프로그램 만들기
예제로 알려주시는 파일 어디서 다운받나요?
예제로 알려주시는 파일 어디서 다운받나요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
네이버쇼핑 크롤링 문의
안녕하세요, 금일 "섹션 15. 네이버 쇼핑 크롤링 + 챗GPT(openai API)" 수강 중에 네이버쇼핑 크롤링이 제대로 되지 않아 질문 드립니다. 강의 그대로 BeautifulSoup만을 이용하여 크롤링을 해보니이상하게 제품을 1개밖에 못 가져오는 현상이 있어서Selenium을 이용하여 크롤링 해보았으나 결과는 같았습니다. 개발자 도구 말고 '페이지 소스 보기' 로 확인해 보았더니 첫 번째 제품을 제외하고는 모두 json 형태의 소스로 바뀌어 있었습니다.이런 경우에는 어떻게 크롤링 해야 하나요?답변 부탁드립니다.감사합니다.
-
해결됨파이썬으로 나만의 블로그 자동화 프로그램 만들기
제가 129 버전인데 드리아버에는 128 버전까지밖에 없는데 다운그레이드 해야하나요?
제가 129 버전인데 드리아버에는 128 버전까지밖에 없는데 다운그레이드 해야하나요?
-
미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
이것도 로직이 바뀐 것 같아요.
안녕하세요.로직이 바뀐 것 같아서요.확인 부탁드립니다 ~그리고 최종 코드보면 새그룹을 만드는게 프로그램 시작되면로긴 후 바로 새그룹을 만들고 시작을 하더라고요.서이추를 하던중에 그룹인원이 꽉차면 만든다고강의에서 본 것 같거든요~로긴 후 바로 새그룹을 만들고 서이추가 시작되니까프로그램 시작할 때 마다 새그룹이 생겨서 빈 새그룹만 수십개가 되어버리고 있어요.
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
asyncio.run() cannot be called from a running event loop 에러 질문 드립니다
안녕하세요 선생님강의 듣고 있는 이광희라고 합니다.올려주신 강의로 텔레그램 자체 API를 써서 메세지 전송하기까진 했는데요이미지를 전송하려고 보니 거의 모든 블로그, 유튜브 설명들이 파이썬 텔레그램봇으로 설명 하더라구요근데 이 봇이 v20으로 바뀌면서 비동기 프로그래밍(?)이 된거 같습니다.설명하고 있는 코드들이 다 과거 버전 코드들이네요. 그래서 위키에 직접 가서 코드를 보고 있는데요 import asyncio import telegram async def main(): bot = telegram.Bot("TOKEN") async with bot: print(await bot.get_me()) if __name__ == '__main__': asyncio.run(main())그냥 위키에 나오는 간단한 코드인데도 RuntimeError: asyncio.run() cannot be called from a running event loop이런 에러가 계속 뜹니다.async 부터 공부하려고 다른 유튜브를 찾아서import asyncio async def main(): await asyncio.sleep(1) print('hello') asyncio.run(main())이런 간단한 코드를 입력해도똑같은 오류가 뜨네요...이벤트 메인 루프가 실행되고 있는 동안에 함수가 작동할수 없다 그런 내용인거 같은데위키에 있는 그대로 따라해도 에러가 나니 비전공자 입장에서는 어떻게 해야 좋을지 모르겠네요. 경영학과 출신 직장인이 실무에서 쓰려고 파이썬을 배우고 있는데물어볼곳이 여기밖에 없어 여쭤봅니다ㅠㅠ 좀 도와주세요깃헙? 말고 국내 파이썬 qna있는 커뮤니티라도 알려주시면 가서 좀 물어보고 싶은데 그게 어디인지도 모르겠네요.
-
미해결3분만에 1000명 DB 확보하는 DB 추출기 프로그램 개발 강의 (셀레니움 + pyqt + gui + exe 프로그램)
로직이 바뀐 것 같아요. 확인 부탁드립니다.
안녕하세요.잘 됐었는데 오늘 다시 해보니 안되네요. 로직이 바뀐 것 같은데 확인 부탁드려도 될까요?
-
미해결네이버 카페 DB 추출 프로그램 개발 강의 [selenium]
환불요청 실습 진행 적용 불가
네이버 카페 DB를 수집하기 위해 강의를 구입하였는데...내용이 어려워 강의내용을 복습하다 보니 4강에서 부터 실습이 전혀 진행이 안되네요2024년 2월 날짜 기준 강의 내용 과 현재의 패턴이 달라 적용이 안되네요강의내용과 다름(네이버카페 쪽지에 아이디를 찾을 수가 없어 )패턴 실습 진행이 불가능합니다..네이버카페 보안강화로 인한 강의"내이버카페 DB추출 프로그램 개발"내용은 적용 불가능한 것으로 판단됨 이 부분 확인 부탁 드리며 환불 요청 드립니다.. 환불사유 일반 강의도 아닌 "네이버 카페 DB추출 프로그램 개발" 강의 인데 강의 실습이 진행되지 않는점.특정 프로그램 개발만을 위한 짧은 강의만으로 이루어진 강의.네이버 보안으로 막힌 부분으로 인프런측에서 이 강의는 삭제를 해야할 사안 같네요.답변 연락부탁드립니다.
-
미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
로긴할 때 폰으로 보안코드 보낸거 입력하라는거요..
로긴할 때 폰으로 보안코드 보낸거 입력하라는거요..정보 저장하고 신뢰하는 기기로 설정해서 수동 로긴을 해도다시 프로그램으로 로긴 하려하면 또 보안코드 입력하라고 떠서로긴부터 막히는데 방법 없을까요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
멜론 유저에이전트 값 입력했음에도 창접속이안되여 ㅜㅜ
#라이브러리 from selenium import webdriver # Selenium의 웹 드라이버를 사용하기 위한 모듈을 임포트 from selenium.webdriver.common.by import By # Selenium에서 사용하는 By 클래스를 임포트합니다. 이 클래스는 웹 요소를 검색하는데 사용 from selenium.webdriver.common.keys import Keys #키보드 입력을 제어하기 위한 Keys 클래스를 임포트 from selenium.webdriver.chrome.service import Service # Chrome 드라이버 서비스를 사용하기 위한 모듈을 임포트 from selenium.webdriver.chrome.options import Options # Chrome 드라이버 옵션을 설정하기 위한 클래스를 임포트 from webdriver_manager.chrome import ChromeDriverManager #Chrome 드라이버를 자동으로 설치 및 관리하는 데 사용되는 매니저를 임포트 import time #시간 관련 함수를 사용하기 위한 time 모듈을 임포 myOption = Options() myAgent = '''Mozilla/5.0 (Linux; Android 9.0; SAMSUNG SM-F900U Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36''' myOption.add_argument(f"user-agent = {myAgent}") myOption.add_argument("--start-maximized") myOption.add_experimental_option("detach",True) myOption.add_experimental_option("excludeSwitches", ["enable-logging"]) myService = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=myService, options=myOption ) url = "https://m2.melon.com/index.htm" time.sleep(2)
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
최신 셀레니움 테스트 소프트에 의해 제어...
안녕하세요~예전에 셀레니움좀 하다가 다시 최근에 만지작 하고 있습니다.최신 셀레니움의 경우 크롬드라이버 버전 다운로드 필요없이 되더라구요! 아무튼 셀레니움 options값을 통해서 자동화제어창 문구 안뜨게 하고,user agent 값에 정상적인걸 나오게 해놓으면 상대방 서버에 접속했을 때 티가 안날까요?나쁜짓 하려는건 아니고,네이버랑 다음에서그냥 단순반복 작업을 셀레니움으로 시킬까 하는데 이게 이상하게 보일까 싶어서 궁금합니다.과도하게 요청하는것도 아니고 그냥 느릿느릿하게 작업하게 했거든요. 근데 이렇게 숨겨도 맘먹고 찾아내서 조치를 취할 수 있을까요?
-
미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
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/왜그런가요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
텔레그램 센드 메세지 API 4,096바이트 넘을시 전송 불가
안녕하세요유튜브도 보고, 강의도 결제해서 보고 있는 이광희라고 합니다.강의 정말 감사드립니다. 강의대로 코드 짰더니 봇에 전송도 잘 되는데문제는 메세지가 길어져서 (업무특성상 뉴스 검색량이 많음)4,096바이트를 넘어가니 전송이 아얘 되지를 않네요. 일반적인 텔레그램 1:1채팅이나 단체방 채팅에서는 장문을 입력하면 자동으로 나눠져서 전송되는데API는 4,096바이트가 넘어가니 아얘 전송이 되질 않네요.1) 이걸 코딩에서 해결해서 전송해야 한다면 어떤 방법이 있을지2) 아니면 텔레그램 API상 다른 방법이 있는지요궁금합니다
-
미해결[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발
폰에 atx라는 자동차 모양 아이콘의 앱이 설치되었어요.
폰에 atx라는 자동차 모양 아이콘의 앱이 설치되었어요.얘가 전화 허용이라는 권한을 요청하기도 했고폰 상단 알림창에 계속 uiautomator 이라는 이름과 ip주소가 써진 알람을 계속 보내요 . 알람을 지우고 몇 분 뒤에 보면 또 알람창에 떠 있고. 이 앱을 폰에 계속 설치되어 있는 상태로 있어야 하는지 궁금합니다. 앱 들어가보면 weditor처럼 중국어(?)로 써져 있어서 불안해서요.
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
xpath 질의
강사님 매번 강의로 도움많이받고있습니다 감사합니다. 개인적으로 일전에 구글을 예를 들어 다양한 키워드에 따라 생성 텝메뉴들이 달라져서 고민을 많이하던때가있었는데'View탭 클릭하여 페이지넘어가기'강의와 같이 xpath 지정하였을때 '//*[text()="VIEW"]' 입력하면 되는것일까요?음 현재 네이버가 뷰 서비스를 폐지했는데 만약 블로그를 클릭한다면 '//*[text()="블로그"]' 를 입력하면 클릭이되나요?안되서여ㅜㅜ혹시 도움이될만한 고견주시면 감사드리겠습니다.