webdriver_manager icon indicating copy to clipboard operation
webdriver_manager copied to clipboard

webdriver-manager with error on Chrome

Open AlineGobbi opened this issue 1 year ago • 3 comments

import pandas as pd import mysql.connector from bs4 import BeautifulSoup from time import sleep from datetime import datetime from selenium import webdriver from selenium.webdriver.common.keys import Keys from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service from selenium.common.exceptions import NoSuchElementException servico = Service(ChromeDriverManager().install()) navegador = webdriver.Chrome(service=servico)

OSError: [WinError 193] %1 não é um aplicativo Win32 válido

AlineGobbi avatar Jul 30 '24 11:07 AlineGobbi

I've also encountered similar problem

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get('https://test.com/Login/')
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
File d:\PycharmProjects\master_db_updater\open_inforex.py:2
      [1](file:///D:/PycharmProjects/master_db_updater/open_inforex.py:1) # %%
----> [2](file:///D:/PycharmProjects/master_db_updater/open_inforex.py:2) driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
      [3](file:///D:/PycharmProjects/master_db_updater/open_inforex.py:3) driver.get('https://test.com/Login')
      [5](file:///D:/PycharmProjects/master_db_updater/open_inforex.py:5) # Wait for the page to load

File d:\PycharmProjects\master_db_updater\.venv\Lib\site-packages\selenium\webdriver\chrome\webdriver.py:45, in WebDriver.__init__(self, options, service, keep_alive)
     [42](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:42) service = service if service else Service()
     [43](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:43) options = options if options else Options()
---> [45](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:45) super().__init__(
     [46](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:46)     browser_name=DesiredCapabilities.CHROME["browserName"],
     [47](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:47)     vendor_prefix="goog",
     [48](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:48)     options=options,
     [49](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:49)     service=service,
     [50](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:50)     keep_alive=keep_alive,
     [51](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chrome/webdriver.py:51) )

File d:\PycharmProjects\master_db_updater\.venv\Lib\site-packages\selenium\webdriver\chromium\webdriver.py:55, in ChromiumDriver.__init__(self, browser_name, vendor_prefix, options, service, keep_alive)
     [52](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:52)     options.browser_version = None
     [54](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:54) self.service.path = finder.get_driver_path()
---> [55](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:55) self.service.start()
     [57](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:57) executor = ChromiumRemoteConnection(
     [58](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:58)     remote_server_addr=self.service.service_url,
     [59](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:59)     browser_name=browser_name,
   (...)
     [62](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:62)     ignore_proxy=options._ignore_local_proxy,
     [63](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:63) )
     [65](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/chromium/webdriver.py:65) try:

File d:\PycharmProjects\master_db_updater\.venv\Lib\site-packages\selenium\webdriver\common\service.py:98, in Service.start(self)
     [91](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:91) def start(self) -> None:
     [92](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:92)     """Starts the Service.
     [93](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:93) 
     [94](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:94)     :Exceptions:
     [95](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:95)      - WebDriverException : Raised either when it can't start the service
     [96](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:96)        or when it can't connect to the service
     [97](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:97)     """
---> [98](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:98)     self._start_process(self._path)
    [100](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:100)     count = 0
    [101](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:101)     while True:

File d:\PycharmProjects\master_db_updater\.venv\Lib\site-packages\selenium\webdriver\common\service.py:208, in Service._start_process(self, path)
    [205](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:205)         start_info.dwFlags = subprocess.CREATE_NEW_CONSOLE | subprocess.STARTF_USESHOWWINDOW
    [206](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:206)         start_info.wShowWindow = subprocess.SW_HIDE
--> [208](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:208)     self.process = subprocess.Popen(
    [209](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:209)         cmd,
    [210](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:210)         env=self.env,
    [211](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:211)         close_fds=close_file_descriptors,
    [212](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:212)         stdout=self.log_output,
    [213](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:213)         stderr=self.log_output,
    [214](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:214)         stdin=PIPE,
    [215](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:215)         creationflags=self.creation_flags,
    [216](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:216)         startupinfo=start_info,
    [217](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:217)         **self.popen_kw,
    [218](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:218)     )
    [219](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:219)     logger.debug(
    [220](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:220)         "Started executable: `%s` in a child process with pid: %s using %s to output %s",
    [221](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:221)         self._path,
   (...)
    [224](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:224)         self.log_output,
    [225](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:225)     )
    [226](file:///D:/PycharmProjects/master_db_updater/.venv/Lib/site-packages/selenium/webdriver/common/service.py:226) except TypeError:

File ~\AppData\Local\Programs\Python\Python311\Lib\subprocess.py:1026, in Popen.__init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, user, group, extra_groups, encoding, errors, text, umask, pipesize, process_group)
   [1022](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1022)         if self.text_mode:
   [1023](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1023)             self.stderr = io.TextIOWrapper(self.stderr,
   [1024](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1024)                     encoding=encoding, errors=errors)
-> [1026](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1026)     self._execute_child(args, executable, preexec_fn, close_fds,
   [1027](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1027)                         pass_fds, cwd, env,
   [1028](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1028)                         startupinfo, creationflags, shell,
   [1029](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1029)                         p2cread, p2cwrite,
   [1030](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1030)                         c2pread, c2pwrite,
   [1031](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1031)                         errread, errwrite,
   [1032](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1032)                         restore_signals,
   [1033](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1033)                         gid, gids, uid, umask,
   [1034](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1034)                         start_new_session, process_group)
   [1035](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1035) except:
   [1036](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1036)     # Cleanup if the child failed starting.
   [1037](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1037)     for f in filter(None, (self.stdin, self.stdout, self.stderr)):

File ~\AppData\Local\Programs\Python\Python311\Lib\subprocess.py:1538, in Popen._execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_gid, unused_gids, unused_uid, unused_umask, unused_start_new_session, unused_process_group)
   [1536](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1536) # Start the process
   [1537](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1537) try:
-> [1538](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1538)     hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
   [1539](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1539)                              # no special security
   [1540](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1540)                              None, None,
   [1541](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1541)                              int(not close_fds),
   [1542](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1542)                              creationflags,
   [1543](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1543)                              env,
   [1544](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1544)                              cwd,
   [1545](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1545)                              startupinfo)
   [1546](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1546) finally:
   [1547](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1547)     # Child is launched. Close the parent's copy of those pipe
   [1548](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1548)     # handles that only the child should have open.  You need
   (...)
   [1551](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1551)     # pipe will not close when the child process exits and the
   [1552](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1552)     # ReadFile will hang.
   [1553](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1553)     self._close_pipe_fds(p2cread, p2cwrite,
   [1554](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1554)                          c2pread, c2pwrite,
   [1555](https://file+.vscode-resource.vscode-cdn.net/d%3A/PycharmProjects/master_db_updater/~/AppData/Local/Programs/Python/Python311/Lib/subprocess.py:1555)                          errread, errwrite)

OSError: [WinError 193] %1 is not a valid Win32 application

adi-prasetyo avatar Aug 01 '24 03:08 adi-prasetyo

Found the solution, just use this instead

driver = webdriver.Chrome()

rather than webdriver_manager. Seems selenium has now been able to auto update the driver

adi-prasetyo avatar Aug 01 '24 04:08 adi-prasetyo

Automated driver management TL;DR: Selenium Manager automatically discovers, downloads, and caches the drivers required by Selenium when these drivers are unavailable.

The primary feature of Selenium Manager is called automated driver management. Let’s consider an example to understand it. Suppose we want to driver Chrome with Selenium (see the doc about how to start a session with Selenium). Before the session begins, and when the driver is unavailable, Selenium Manager manages chromedriver for us. We use the term management for this feature (and not just download) since this process is broader and implies different steps:

Browser version discovery. Selenium Manager discovers the browser version (e.g., Chrome, Firefox, Edge) installed in the machine that executes Selenium. This step uses shell commands (e.g., google-chrome --version). Driver version discovery. With the discovered browser version, the proper driver version is resolved. For this step, the online metadata/endpoints maintained by the browser vendors (e.g., chromedriver, geckodriver, or msedgedriver) are used. Driver download. The driver URL is obtained with the resolved driver version; with that URL, the driver artifact is downloaded, uncompressed, and stored locally. Driver cache. Uncompressed driver binaries are stored in a local cache folder (~/.cache/selenium). The next time the same driver is required, it will be used from there if the driver is already in the cache.

cobaltautomationdev avatar Sep 25 '24 08:09 cobaltautomationdev