Support proxy in request and session cmds (#754)

This commit is contained in:
NyaMisty 2023-05-24 03:53:13 +08:00 committed by GitHub
parent 4db85a2d0f
commit efaa5f31b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 5 deletions

View File

@ -179,7 +179,7 @@ def _cmd_request_post(req: V1RequestBase) -> V1ResponseBase:
def _cmd_sessions_create(req: V1RequestBase) -> V1ResponseBase: def _cmd_sessions_create(req: V1RequestBase) -> V1ResponseBase:
logging.debug("Creating new session...") logging.debug("Creating new session...")
session, fresh = SESSIONS_STORAGE.create(session_id=req.session) session, fresh = SESSIONS_STORAGE.create(session_id=req.session, proxy=req.proxy)
session_id = session.session_id session_id = session.session_id
if not fresh: if not fresh:
@ -236,7 +236,7 @@ def _resolve_challenge(req: V1RequestBase, method: str) -> ChallengeResolutionT:
driver = session.driver driver = session.driver
else: else:
driver = utils.get_webdriver() driver = utils.get_webdriver(req.proxy)
logging.debug('New instance of webdriver has been created to perform the request') logging.debug('New instance of webdriver has been created to perform the request')
return func_timeout(timeout, _evil_logic, (req, driver, method)) return func_timeout(timeout, _evil_logic, (req, driver, method))
except FunctionTimedOut: except FunctionTimedOut:

View File

@ -25,7 +25,7 @@ class SessionsStorage:
def __init__(self): def __init__(self):
self.sessions = {} self.sessions = {}
def create(self, session_id: Optional[str] = None, force_new: Optional[bool] = False) -> Tuple[Session, bool]: def create(self, session_id: Optional[str] = None, proxyconf: Optional[dict] = None, force_new: Optional[bool] = False) -> Tuple[Session, bool]:
"""create creates new instance of WebDriver if necessary, """create creates new instance of WebDriver if necessary,
assign defined (or newly generated) session_id to the instance assign defined (or newly generated) session_id to the instance
and returns the session object. If a new session has been created and returns the session object. If a new session has been created
@ -44,7 +44,7 @@ class SessionsStorage:
if self.exists(session_id): if self.exists(session_id):
return self.sessions[session_id], False return self.sessions[session_id], False
driver = utils.get_webdriver() driver = utils.get_webdriver(proxyconf=proxyconf)
created_at = datetime.now() created_at = datetime.now()
session = Session(session_id, driver, created_at) session = Session(session_id, driver, created_at)

View File

@ -36,7 +36,7 @@ def get_flaresolverr_version() -> str:
return FLARESOLVERR_VERSION return FLARESOLVERR_VERSION
def get_webdriver() -> WebDriver: def get_webdriver(proxyconf: dict=None) -> WebDriver:
global PATCHED_DRIVER_PATH global PATCHED_DRIVER_PATH
logging.debug('Launching web browser...') logging.debug('Launching web browser...')
@ -55,6 +55,11 @@ def get_webdriver() -> WebDriver:
options.add_argument('--ignore-certificate-errors') options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors') options.add_argument('--ignore-ssl-errors')
if proxyconf:
proxy_url = proxyconf['url']
logging.debug("Using webdriver proxy: %s", proxy_url)
options.add_argument('--proxy-server=%s' % proxy_url)
# note: headless mode is detected (options.headless = True) # note: headless mode is detected (options.headless = True)
# we launch the browser in head-full mode with the window hidden # we launch the browser in head-full mode with the window hidden
windows_headless = False windows_headless = False