Как определять какой вебдрайвер нужен автоматически Selenium Python?

Что если я не могу заранее знать какой будет браузере на запускаемом компе. Как мне в коде определять вебдрайвер автоматически?


Ответы (1 шт):

Автор решения: vadim vaduxa

Например можно использовать selene или selenide, он сам определит установленный браузер, скачает и запустит нужный драйвер:

import selene.api
selene.api.browser.open_url('http://ya.ru')
====== WebDriver manager ======
Current google-chrome version is 101.0.4951
Get LATEST chromedriver version for 101.0.4951 google-chrome
Trying to download new driver from https://chromedriver.storage.googleapis.com/101.0.4951.41/chromedriver_win32.zip
Driver has been saved in cache [C:\Users\vadux\.wdm\drivers\chromedriver\win32\101.0.4951.41]

Или использовать только webdriver_manager, тут тоже определится установленный браузер, драйвер автоматически скачается и запустится:

import selenium.webdriver, selenium.common.exceptions, webdriver_manager.firefox, webdriver_manager.chrome, webdriver_manager.microsoft, webdriver_manager.utils, webdriver_manager.opera

def get_driver(i=0) -> selenium.webdriver.Chrome:
    try:  return Drivers[i]()
    except selenium.common.exceptions.SessionNotCreatedException as e:
        print('Текущий браузер не найден:', e)
        return get_driver(i + 1)
    except IndexError: raise selenium.common.exceptions.SessionNotCreatedException('браузер не найден')

Drivers = [
    lambda: selenium.webdriver.Firefox(executable_path=webdriver_manager.firefox.GeckoDriverManager().install()),
    lambda: selenium.webdriver.Chrome(webdriver_manager.chrome.ChromeDriverManager(chrome_type=webdriver_manager.utils.ChromeType.CHROMIUM).install()),
    lambda: selenium.webdriver.Ie(webdriver_manager.microsoft.IEDriverManager().install()),
    lambda: selenium.webdriver.Edge(webdriver_manager.microsoft.EdgeChromiumDriverManager().install()),
    lambda: selenium.webdriver.Opera(executable_path=webdriver_manager.opera.OperaDriverManager().install()),
]
if __name__ == '__main__':
    driver = get_driver()
    driver.get('http://ya.ru')
    print(driver.find_elements_by_link_text('Сделать стартовой'))
    driver.quit()
====== WebDriver manager ======
Could not get version for firefox.Is firefox installed?
Get LATEST geckodriver version for None firefox
Getting latest mozilla release info for v0.31.0
Trying to download new driver from https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win64.zip
Driver has been saved in cache [C:\Users\vadux\.wdm\drivers\geckodriver\win64\v0.31.0]

====== WebDriver manager ======
Текущий браузер не найден: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line

Could not get version for chromium.Is chromium installed?
Get LATEST chromedriver version for None chromium
Trying to download new driver from https://chromedriver.storage.googleapis.com/101.0.4951.41/chromedriver_win32.zip
Driver has been saved in cache [C:\Users\vadux\.wdm\drivers\chromedriver\win32\101.0.4951.41]

[<selenium.webdriver.remote.webelement.WebElement (session="d1307776cda3e107646336462698064c", element="9191f724-259c-4ccb-a0ff-b2b7d89af652")>]
→ Ссылка