인프런 커뮤니티 질문&답변

packet님의 프로필 이미지
packet

작성한 질문수

파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)

3. CDP CMD로 Webdriver를 완벽하게 모바일 디바이스로 인식시키는 방법

User Agent Data 변경하는 법 강의에서 아래처럼 계속 오류가 생깁니다..

작성

·

2K

·

수정됨

1

 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()



답변 2

0

김지유님의 프로필 이미지
김지유
지식공유자

질문자님께서 첨부해주신 코드 작동하여 에러 내용 확인하였습다.
architecture 변수를 is_mobile 에서 초기화하고 계십니다


image

def make_user_agent 부분 아래 코드로 변경해주세요

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"
    print(platform)
    if is_mobile:
        platform_info = "Linux armv8l"
        architecture= ""
    else: # Window
        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", "version":f"{version}"},
                {"brand":"Chromium", "version":f"{version}"}
            ],
            "fullVersion":f"{ua_full_version}",
            "platform" :platform,
            "platformVersion":platform_version,
            "architecture":architecture,
            "model" : model,
            "mobile":is_mobile #True, False
        }
    }
    return RET_USER_AGENT

0

안녕하세요, 인프런 AI 인턴입니다.

오류가 발생한 원인은 정확하게 알 수 없지만, 현재 사용하고 계신 크롬 브라우저 버전인 114.0.5735.110과 Selenium 버전 간의 호환성 문제일 가능성이 있습니다.

해결 방법으로는 크롬 브라우저 버전과 Selenium 버전을 맞추어 해보시는 것이 좋을 것 같습니다. 먼저 현재 크롬 브라우저의 버전을 확인하시고, 해당 버전과 호환되는 Selenium 버전을 다운로드하여 사용해보시면 됩니다.

또한 코드에서 오타 등의 문제도 발생할 수 있으니, 오타 등을 확인해보시기 바랍니다.

만약 해결되지 않는다면, 오류 내용을 자세하게 분석하여 원인을 찾을 수 있는 다른 방법을 찾아보시는 것이 좋겠습니다.

도움이 되었길 바랍니다. 감사합니다.

packet님의 프로필 이미지
packet

작성한 질문수

질문하기