9
9
10
10
from .http import SeleniumRequest
11
11
12
-
13
12
class SeleniumMiddleware :
14
13
"""Scrapy middleware handling the requests using selenium"""
15
14
@@ -64,6 +63,17 @@ def __init__(self, driver_name, driver_executable_path,
64
63
capabilities = driver_options .to_capabilities ()
65
64
self .driver = webdriver .Remote (command_executor = command_executor ,
66
65
desired_capabilities = capabilities )
66
+ # webdriver-manager
67
+ else :
68
+ # selenium4+ & webdriver-manager
69
+ from selenium import webdriver
70
+ from webdriver_manager .chrome import ChromeDriverManager
71
+ from selenium .webdriver .chrome .service import Service as ChromeService
72
+ if driver_name and driver_name .lower () == 'chrome' :
73
+ # options = webdriver.ChromeOptions()
74
+ # options.add_argument(o)
75
+ self .driver = webdriver .Chrome (options = driver_options ,
76
+ service = ChromeService (ChromeDriverManager ().install ()))
67
77
68
78
@classmethod
69
79
def from_crawler (cls , crawler ):
@@ -78,7 +88,8 @@ def from_crawler(cls, crawler):
78
88
if driver_name is None :
79
89
raise NotConfigured ('SELENIUM_DRIVER_NAME must be set' )
80
90
81
- if driver_executable_path is None and command_executor is None :
91
+ # let's use webdriver-manager when nothing specified instead | RN just for Chrome
92
+ if (driver_name .lower () != 'chrome' ) and (driver_executable_path is None and command_executor is None ):
82
93
raise NotConfigured ('Either SELENIUM_DRIVER_EXECUTABLE_PATH '
83
94
'or SELENIUM_COMMAND_EXECUTOR must be set' )
84
95
0 commit comments