def firefox_get_cookies(url): """ :param url: 请求连接 :return: """ c_service = Service('geckodriver') driver = any try: c_service.command_line_args() c_service.start() firefox_options = Options() # 不启动界面显示- linux下命令行模式必须启用 firefox_options.add_argument('-headless') driver = Firefox(options=firefox_options) driver.get(url) # 第一次请求浏览器一般无法显示cookie # 等待第一次加载完成 time.sleep(2) # 刷新 driver.refresh() # 等待第二次加载完成 time.sleep(2) return driver.get_cookies() except Exception as e: print(e) finally: driver.quit() c_service.stop()
class WebDriver(RemoteWebDriver): # There is no native event support on Mac NATIVE_EVENTS_ALLOWED = sys.platform != "darwin" def __init__(self, firefox_profile=None, firefox_binary=None, timeout=30, capabilities=None, proxy=None, executable_path="wires", firefox_options=None): capabilities = capabilities or DesiredCapabilities.FIREFOX.copy() self.profile = firefox_profile or FirefoxProfile() self.profile.native_events_enabled = ( self.NATIVE_EVENTS_ALLOWED and self.profile.native_events_enabled) self.binary = firefox_binary or capabilities.get( "binary", FirefoxBinary()) self.options = firefox_options or Options() self.options.binary_location = self.binary if isinstance( self.binary, basestring) else self.binary._start_cmd self.options.profile = self.profile capabilities.update(self.options.to_capabilities()) # marionette if capabilities.get("marionette"): self.service = Service(executable_path, firefox_binary=self.options.binary_location) self.service.start() executor = FirefoxRemoteConnection( remote_server_addr=self.service.service_url) RemoteWebDriver.__init__(self, command_executor=executor, desired_capabilities=capabilities, keep_alive=True) else: # Oh well... sometimes the old way is the best way. if proxy is not None: proxy.add_to_capabilities(capabilities) executor = ExtensionConnection("127.0.0.1", self.profile, self.binary, timeout) RemoteWebDriver.__init__(self, command_executor=executor, desired_capabilities=capabilities, keep_alive=True) self._is_remote = False def quit(self): """Quits the driver and close every associated window.""" try: RemoteWebDriver.quit(self) except (http_client.BadStatusLine, socket.error): # Happens if Firefox shutsdown before we've read the response from # the socket. pass if "specificationLevel" in self.capabilities: self.service.stop() else: self.binary.kill() try: shutil.rmtree(self.profile.path) if self.profile.tempfolder is not None: shutil.rmtree(self.profile.tempfolder) except Exception as e: print(str(e)) @property def firefox_profile(self): return self.profile def set_context(self, context): self.execute("SET_CONTEXT", {"context": context})