묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
네이버 로그인시 접근 방식에 대해 궁금증이 생겼습니다.
샐러리움 모바일 상태에서 네이버 로그인하려는데 [1번: 네이버 메인화면에서 바로 로그인 사이트 주소로 타이핑 하여 들어가는 방법]과 [2번 : 네이버 모바일에서 하나하나 클릭하는 코드를 만들어서 로그인 화면으로 들어가는 방법] 2가지 방식을 알게 되었습니다.그런데 1번 방법으로 접근할 경우 iP보안 란이 뜹니다. 내용을 읽어보면 이걸 무시하고 진행하기 보다는 해제한 상태에서 진행하는 것이 사전에 문제를 차단할 수 있는 방법으로 보입니다. 반면 2번에는 일너 ip보안 창이 나오지 않는 것을 알 수 있습니다. (생략 되는 건지 어떤건지는 모르겠습니다 )그렇다면 1번의 방식으로 접근하는 것이 크롤링을 덜 차단당 할 수 있는 안전한 방법인가요?1. https://nid.naver.com/nidlogin.login?mode=form&url=https://m.naver.com https://nid.naver.com/nidlogin.login?svctype=262144&url=https%3A%2F%2Fm.naver.com%2Fna%2F
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
모바일 해상도와 userAgents 정보
수강완료 후 다시보고 있는데 userAgent 정보에 있는 모바일 디바이스 정보와 디바이스에 맞는 동일 해상도로 크롤리 작업을 할 필요는 없을까 하는 의문이 듭니다. 예를 들어 a52s라는 모바일 디바이스로 크롤링을 한다면 해상도 2400 x 1080으로 화면을 띄우고 작업해여 하지 않나 라는거죠 포털 사이트에서 모바일 디바이스와 동일하지 않는 해상도로 작업하는 계정을 벤하지 않을까 걱정이 됩니다. ㅜㅜ
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
execute_cdp_cmd 코드가 작동하지 않습니다.
from user_agents import parse from selenium import webdriver from selenium.webdriver.chrome.options import Options import random, time # 한국에서 개통된 버전은 이런 데이터 들이 필요하다. def make_user_agent(ua, is_mobile): user_agent = parse(ua) model = user_agent.device.model platform = user_agent.os.family platform_version = user_agent.os.version_string + ".0.0" version = user_agent.browser.version[0] ua_full_version = user_agent.browser.version_string architecture ="x86" if is_mobile: # 모바일 버전 platform_info = "Linux armv81" architectur="" else: # PC 버전 platform_info = "Win32" model = "" RET_USER_AGENT = { "appVersion" : ua.replace("Mozilla/", ""), "userAgent" : ua, "platform" : f"{platform_info}", "acceptLanguage" : "ko-Kr, kr, en-US, en", "userAgentMetaData" : { "brands" :[ # 네트워크 탭 확인하고 넣기 {"brand":" Not A;Brand", "version":"99"}, {"brand":"Google Chrome", "bersion":f"{version}"}, {"brand":"Chromium", "version":f"{version}"} ], "fullVersion":f"{ua_full_version}", "platform":platform, "platformVersion":platform_version, "architectur":architecture, "model" : model, "mobile":is_mobile # True, False } } return RET_USER_AGENT pc_device = ["1920,1440","1920,1200","1920,1080","1600,1200","1600,900", "1536,864", "1440,1080","1440,900","1360,768" ] mo_device = [ "360,640", "360,740", "375,667", "375,812", "412,732", "412,846", "412,869", "412,892", "412,915" ] width, height = random.choice(mo_device).split(",") print(width, height) UA = "Mozilla/5.0 (Linux; Android 9; Mi A2 Lite Build/PKQ1.180917.001; AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/127.0.0.0 Safari/537.36'" options = Options() UA_Data = make_user_agent(UA, True) print(UA_Data) #UserAgent 속이기 options.add_argument(f"--user-agent={UA}") options.add_argument(f"--window-size={width}, {height}") options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(options=options) driver.execute_cdp_cmd("Network.setUserAgentOverride",UA_Data) driver.get('https://www.google.com') input() --아래 코드가 작동하지 않습니다. 이유가 뭘까요?driver.execute_cdp_cmd("Network.setUserAgentOverride",UA_Data) [ 버전 ]python 3.10.10selenium 4.13.0
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
move_to_bottom 스크롤 부분
scroll_by_amount로 바뀌면서 시작하는 위치를 설정할 수 없게 된 것 같은데, 만약 인피니티 스크롤 하려고 할 때, 해당 마우스 포인터가 특정한 섹션에 있어야지 인피티니 스크롤을 할 수 있는 페이지라면 어떻게 설정을 해야될까요? 따로 sx, sy와 같이 해당 부분을 고정시키는 방법은 없을까요?
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
강의자료 어디서볼까요?
강의자료 어디서 볼까요?강의자료소스자료(github 등)수강내용중에 참고 사이트 등 정보는 댓글로 남겨둔다고 하셨는데 그 댓글들은 어디서 확인할 수 있을까요?확인 부탁드립니다.감사합니다.
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
1강에서 localhost:4000 접속
1강에서http://localhost:4000 연결은윈도우 자체에서 4000번 포트를 열어서 연결하는건가요?설명없이 갑자기 4000번 포트로 연결하니 따라가기가 어렵습니다.
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
uc를사용할때 유저 에이전트 변경이 불가능합니다.
undetected chromedriver 를 사용할때UA_Data = make_user_agent(UA, True) self.driver.execute_cdp_cmd("Network.setUserAgentOverride", UA_Data)를 이용하여도 userAgentData의 변경이 되지 않습니다.버전의 문제일까요?
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
강의 코드는 어디서 볼 수 있나요?
안녕하세요. 자꾸 질문드려서 죄송합니다. 혹시 강의 진행에 사용된 코드 깃허브 주소같은거나 첨부파일은 없나요? 맨 마지막 파트에 있는건 추가된 강의에 대한 코드 자료들만 있어서요..
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
문서에서 어떤걸 찾아야 하고 어떻게 읽어야하는지도 알려주시면 좋겠습니다
안녕하세요. 4. CDP Command 종류 많죠? 잘 정리된 사이트 소개해드림부분 강의 듣고있습니다. 파란 사이트, 초록 사이트 주소 알려주신다고 했는데 어디에 나와있나요? 그리고 문서에서 어떤 걸 저희가 능동적으로 찾아야 하고 어떻게 읽고 적용하는지도 알려주시면 좋겠습니다. 필요한 걸 저희가 직접 찾고 적용하는 방법을 알려주셔야 하는데 그냥 코드만 알려주시니까 저희 상황에 맞게 수정하는 방법을 모르겠습니다. 문서를 활용해서 저희에게 어떤 속성이 필요한지 찾는 방법도 자세히 알려주시면 감사하겠습니다. Emulation 이랑 Network랑 뭐가 다른지도 모르겠어요. setDeviceMetricsOverride 가 왜 필요한건진 알겠는데 이 속성이 필요하다는 걸 아는 방법은 모르겠어요. 즉 물고기를 잡아주기만 하는 게 아니라 잡는 방법을 알려주셨으면 합니다.
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
ch 2-2 User Agent Data 변경하는법) 내 눈으로 본것만 믿읍시다 자막 부분 이해가 안갑니다.
안녕하세요.ch 2-2 User Agent Data 변경하는법 강의에서 10:00, 10:09 에'내 눈으로 본것만 믿읍시다' 자막 부분 이해가 안갑니다. Not?A_Brand는 version 끝자리 숫자로 바뀌었네요 이게 무슨 뜻인가요?version last string 값을 넣어주시죠 version 110 되었을때는 0이 될지 10이 될지 그거는 그때 확인해야할듯함이거는 무슨 뜻일까요?? 강의 보다보면 이렇게 추가적으로 중간중간 자막 달아주신것들이 이해가 안되는 것들이 많습니다. 맥락을 충분히 설명 안해주시고 말씀하시는 느낌이 든달까... 조금만 더 자세히 설명해주시면 감사하겠습니다 ㅜㅜ ---------------추가로, 이 강의에선 undetected_chromedriver 를 사용하지 않고 일반 웹드라이버를 사용하셨는데 undetected 드라이버랑 함께 사용하지 않으신 이유가 뭘까요??
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
게임 매크로에서 영감얻으셨다는 영상보고
궁금한게 있습니다.게임 매크로가 어려운게 맥 어드레스(?)도 가져가고 복잡하다고 하셨는데, 그럼 네이버나 구글 같은데서는 맥 어드레스 정보를 안가져갈까요? 이 강의를 토대로 구글이나 네이버 자동화 프로그램을 만들어도 효용이 있을까요?
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
새로운 탭에서 설정 유지
핵심 노하우가 담긴 좋은 강의 감사합니다.링크를 클릭하면 새로운 탭이 열리는 경우가 있는데요. 그때는 설정한 user agent값이 없어지더라고요. 이걸 해결할 방법이 잘 떠오르지 않습니다. 해결책이 있을까요?
-
해결됨파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
mouse listener 관련해서 질문 드립니다.
안녕하세요,wsl2 ubuntu 환경에서 스크롤 녹화하는 실습 코드를 실행하는데 클릭하거나 스크롤을 해도 출력이 안되고 파일에 저장이 안되고 있습니다. 혹시 pynput라이브러리 리눅스 환경에서 사용하려면 추가로 설정 해야 하는 부분이 있을까요?
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
random_move 함수 내용에 대하여 질문 드립니다.
강의를 보면 ActionChain(driver).scroll( 이라는 함수를 사용하셨는데 스크롤을 위한 시작점을 선택해서 스크롤 시키는것 같습니다.) 하지만 저도 이 함수를 쓰려고 했지만 해당 함수가 ActionChain 에 안나오는걸로 보여서 나중에 보니 scroll_by_amount로 바뀐거로 보입니다. scroll 을 써야 좀더 사람같은?걸까요? 그리고 ActionChain에 TouchAction 이라는게 보이긴 하는데 터치를 시뮬레이션 할 수 있다면 더 좋을것 같은데 혹시 방법이 있을까요?
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
5.Bot Detection 피하기(고급편) 질문입니다.
options = uc.ChromeOptions()가져와서 아래쪽에 uc.Chrome() 실행할때 options가 안넣어져 있는데 안넣고 실행하는건가요???깃허브에 설명에는driver = uc.Chrome(options=options) 이렇게 되어 있어 보이는데요?
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
문의 드립니다.
# 랜덤 패턴 가지고오기 def get_random_pattern(isMobile=True): ret_pattern = [] if isMobile: with open("./mobile_scroll.txt","r") as f : while True: line = f.readline() if not line: break ret_pattern.append(line.rstrip()) selected_pattern = random.choice(ret_pattern) _,sx,sy,delay = selected_pattern.split("#") if abs(int(sy)) < 15 or float(delay) < 0.25: #너무 적은 값 return get_random_pattern(isMobile) return int(sx), int(sy), float(delay) else: # PC 패턴 with open("./pc_scroll.txt", "r") as f: while True: line = f.readline() if not line: break ret_pattern.append(line.rstrip()) pc_scroll_px = 114 # 100, 114 selected_pattern = random.choice(ret_pattern) _,dx,dy,delay = selected_pattern.split("#") if float(delay) < 0.25: return get_random_pattern(isMobile) return int(dx),int(pc_scroll_px), float(delay) 질문1. 위 패턴에서 pc_scroll_px 를 114로 하는 이유를 잘 모르겠습니다. 저는 모바일 말고 pc로 작업을 해보려고하는데 114씩만 올라갔다 내려갔다 스크롤되는데 전혀 사람처럼 보이지 않고 부자연스러워 보입니다. ㅜ def random_move(driver,direction="down",count=1,isMobile=True): for _ in range(count): # [O] 사람패턴 ~ 사람이 얼마나 스크롤을 움직였는지 # randY = random.randrange(200,300) randX,randY,_delay = get_random_pattern(isMobile) sx = random.randrange(100,270) sy = random.randrange(250,500) if direction == "up": randY = -randY if random.random() > 0.9 : #10%의 확률로 randY = -randY print(f"Scroll 한다 {randY}") ActionChains(driver).scroll_by_amount(0, randY).perform() # [O] 사람패턴 ~ 스크롤 하는 텀 prob = random.random() if prob < 0.5: dt = random.uniform(_delay*0.1, _delay*0.3) elif prob < 0.8: dt = random.uniform(_delay*0.2, _delay*0.6) else: dt = random.uniform(_delay*0.5, _delay*1.2) time.sleep(dt) time.sleep( 0.5) 질문2. 매개변수로 count를 받고있는데 이 부분을 넣은 이유를 정확하게 모르겠네요. ㅜ그리고 sx = random.randrange(100,270)sy = random.randrange(250,500)이렇게 받아둔 변수를 어떻게 활용하는지 강사님께서는 어떻게 사용하는지 궁금합니다.
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
맥스터치포인트 "0"으로 변경되요?
크롤링시 첫페이지~2페이지등에는맥스터치포인트 값이 "1또는5" 로 설정되고 이후 페이지이동등의 경우 뷰탭클릭, 이미지탭클릭, 쇼핑탭클릭, 링크클릭후새탭으로이동, 링크클릭후새창으로이동 할때 맥스터치포인트 값이 "0" 으로 되면서 플랫폼 값도 "win32"로 바뀌는 현상이 있습니다. 이런경우는 어떻게해야하는가요?방법이 있다면 조언부탁드립니다.
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
액션체인 부분.. 스크롤..
해당 부분에서 액션체인 scroll이 오류가 나네요. 제가 뭘 놓친걸까요 ?
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
User Agent Data 변경하는 법 강의에서 아래처럼 계속 오류가 생깁니다..
User Agent Data 변경하는 법 강의에서 아래처럼 계속 오류가 생깁니다.. 코드는 동일하게 입력한 것 같은데..왜 그런 걸까요..? selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: Invalid parameters(Session info: chrome=114.0.5735.110) import requests from user_agents import parse from selenium import webdriver from selenium.webdriver.chrome.options import Options import chromedriver_autoinstaller import random, time, os chromedriver_autoinstaller.install() def make_user_agent(ua, is_mobile): user_agent = parse(ua) model = user_agent.device.model platform = user_agent.os.family platform_version = user_agent.os.version_string + ".0.0" # 모바일 기준이다 version = user_agent.browser.version[0] print('version: ', version) ua_full_version = user_agent.browser.version_string print('ua_full_version: ', ua_full_version) architecture = "x86" print(platform, ' platform') if is_mobile: platform_info = "Linux armv8l" else: # Window platform_info = "Win32" RET_USER_AGENT = { "appVersion" : ua.replace("Mozilla/", ""), "userAgent" : ua, "platform" : f"{platform_info}", "acceptLanguage": "ko-KR, kr, en-US, en", "userAgentMetadata": { "brands" : [ {'brand': 'Not.A/Brand', 'version': '8'}, {'brand': 'Chromium', 'version': '114'}, {'brand': 'Google Chrome', 'version':'114'} ], "fullVersion": f"{ua_full_version}", "platform" : platform, "platformVersion": platform_version, "architecture" : architecture, "model": model, "mobile": is_mobile } } return RET_USER_AGENT pc_device = ["1920,1440","1920,1200","1920,1080","1600,1200","1600,900", "1536,864", "1440,1080","1440,900","1360,768" ] mo_device = [ "360,640", "360,740", "375,667", "375,812", "412,732", "412,846", "412,869", "412,892", "412,915" ] width, height = random.choice(pc_device).split(",") UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" options = Options() UA_Data = make_user_agent(UA, True) # 랜덤 쿠키 생성하기 # ** 1~100의 숫자 이름의 폴더 밑에 쿠키를 생성해서 저장한다 rand_user_folder = random.randrange(1, 100) userCookieDir = os.path.abspath(f"./cookies/{rand_user_folder }") if os.path.exists(userCookieDir) == False: print(userCookieDir, "폴더가 없어서 생성함") os.mkdir(userCookieDir) options.add_argument(f"user-data-dir={userCookieDir}") options.add_argument(f'--user-agent={UA}') options.add_argument(f'--window-size={width}, {height}') driver = webdriver.Chrome(options=options) driver.execute_cdp_cmd("Network.setUserAgentOverride", UA_Data) driver.get('https://google.com') driver.set_window_position(500, 500) input()
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
undetected_chromedriver 사용시 widow-size 가 적용이 안됩니다.
5. bot detection 피하기 고급편에 나온 소스를 그대로 적용하였습니다.다른 부분은 문제가 없고, 에러 또한 없습니다.그런데 window-size 관련된 argument 값이 적용이 안됩니다.항상 큰 사이즈의 윈도우만 오픈되고 있습니다.python 버젼은 3.11.0 입니다.버젼을 다운그레이드 해야 할까요?