Codeit Logo 로그인 웹 자동화웹사이트 제어하기Selenium 준비하기 크롬창이 바로 꺼집니다. 2021년 12월 18일 151 조회 답변 1 강우혁 LV 35 강우혁 LV 35 질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요. 댓글 0개 0 랑이 2021년 12월 20일 LV 197 댓글 0개 0 질문 지켜보기 질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요. python으로 브라우저 컨트롤시에 selenium를 이용해서 컨트롤하는 경우 드라이버 생성을 특정함수 안에서 하게 되면 함수가 종료될때 브라우저도 같이 종료되는데, 가끔 종료되지 않았으면 할때 아래 방법대로 하면 됩니다.(다른 방법도 있을건데 잘 몰라서..) 핵심은 option에 add_experimental_option를 추가하고 "detach"를 True로 활성화 하면됩니다. Edge의 경우(Chrome이나 다른 브라우저는 확인하지 않아서 잘 모름, 뭐 비슷하지 않을까 합니다.) pip install msedge-selenium-tools from msedge.selenium_toos import Edge, EdgeOption 이렇게 하면 from selenium import webdriver를 하지 않아도 됩니다.(당연히 msedgedriver.exe도 받지 않아도 되고) edge_options = EdgeOptions() edge_options.use_chromium = True edge_options.add_experimental_option("detach", True) browser = Edge(options=edge_options) browser.get("http://~") 안녕하세요. 코딩을 가장 쉽게 알려주는 크리에이터, 스타트코딩입니다. selenium 버전이 4버전대로 업데이트 되면서 기존 코드가 제대로 동작하지 않을 수 있습니다. deprecated 메시지도 뜨고요. from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager # 브라우저 꺼짐 방지 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.get("https://www.naver.com") 셀레니움 모듈 설치 후 윈도우 c드라이버(C:/dev_python/Webdriver/chromedriver) 폴더에 크롬드라이버까지는 설치를 했고 아래 소스코드를 실행시키면 크롬 창이 열리긴 합니다. ============================================== from selenium import webdriver from selenium.webdriver.common.keys import Keys chromedriver = 'C:/dev_python/Webdriver/chromedriver' driver = webdriver.Chrome(chromedriver) ============================================== 문제는 열린 후에 저절로 종료가 되며 아래와 같은 에러 메시지가 뜨는데요.. --------------------------------------------------------------------------- WebDriverException Traceback (most recent call last) <ipython-input-22-3fda3c2e7dab> in <module> 3 4 chromedriver = 'C:/dev_python/Webdriver/chromedriver' ----> 5 driver = webdriver.Chrome(chromedriver) ~\anaconda3\lib\site-packages\selenium\webdriver\chrome\webdriver.py in __init__(self, executable_path, port, options, service_args, desired_capabilities, service_log_path, chrome_options, keep_alive) 74 75 try: ---> 76 RemoteWebDriver.__init__( 77 self, 78 command_executor=ChromeRemoteConnection( ~\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in __init__(self, command_executor, desired_capabilities, browser_profile, proxy, keep_alive, file_detector, options) 155 warnings.warn("Please use FirefoxOptions to set browser profile", 156 DeprecationWarning, stacklevel=2) --> 157 self.start_session(capabilities, browser_profile) 158 self._switch_to = SwitchTo(self) 159 self._mobile = Mobile(self) ~\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in start_session(self, capabilities, browser_profile) 250 parameters = {"capabilities": w3c_caps, 251 "desiredCapabilities": capabilities} --> 252 response = self.execute(Command.NEW_SESSION, parameters) 253 if 'sessionId' not in response: 254 response = response['value'] ~\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params) 319 response = self.command_executor.execute(driver_command, params) 320 if response: --> 321 self.error_handler.check_response(response) 322 response['value'] = self._unwrap_value( 323 response.get('value', None)) ~\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response) 240 alert_text = value['alert'].get('text') 241 raise exception_class(message, screen, stacktrace, alert_text) --> 242 raise exception_class(message, screen, stacktrace) 243 244 def _value_or_default(self, obj, key, default): WebDriverException: Message: unknown error: unable to discover open pages (Driver info: chromedriver=2.0,platform=Windows NT 6.2 x86_64) 에러의 원인이 무엇일까요? |