Как определять какой вебдрайвер нужен автоматически 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")>]