Python對Selenium調用瀏覽器
- 2020 年 1 月 16 日
- 筆記
""" 獲取瀏覽器 打開本地瀏覽器 打開遠程瀏覽器 關閉瀏覽器 打開網址 最大化 最小化 標題 url 刷新
Python對Selenium封裝瀏覽器調用
------browser.py文件 """
from selenium import webdriver from Common.tools.rw_ini import read_config from .base import Base class Browser(Base): def get_web_driver(self) -> webdriver.Remote: """獲取瀏覽器實例 :return: 瀏覽器實例 """ rc = read_config("browser.ini") local_browser = rc.getboolean("local", "local_browser", fallback=True) wait_time = rc.getint("local", "wait_time", fallback=10) browser_name = rc.get("browser", "name", fallback="chrome") window_width = rc.get("browser", "window_width", fallback=None) window_height = rc.get("browser", "window_height", fallback=None) command_executor = rc.get("grid", "command_executor", fallback="http://127.0.0.1:4444/wd/hub") headless = rc.getboolean("grid", "headless", fallback=False) proxy = rc.get("grid", "proxy", fallback=None) if local_browser: # 打開本地瀏覽器 driver = self._get_local_web_driver(browser_name) else: # 打開遠程瀏覽器 driver = self._get_remote_web_driver(browser_name, command_executor, headless, proxy) self.logger.info(f"打開瀏覽器:{driver.name}") self.logger.info(f"設置隱式等待:{wait_time}s") driver.implicitly_wait(wait_time) if window_width is None or window_width == "" or window_height is None or window_height == "": self.logger.info("最大化瀏覽器") driver.maximize_window() else: driver.set_window_size(window_width, window_height) return driver def _get_local_web_driver(self, browser_name: str) -> webdriver.Remote: """獲取本地瀏覽器實例 :param browser_name: 瀏覽器類型 :return: 瀏覽器實例 """ if browser_name.upper() == "CHROME": driver = webdriver.Chrome() elif browser_name.upper() == "FIREFOX": driver = webdriver.Firefox() elif browser_name.upper() == "IE": driver = webdriver.Ie() else: self.logger.error(f"瀏覽器類型錯誤:{browser_name}") raise ValueError(f"瀏覽器類型錯誤:{browser_name}") return driver def _get_remote_web_driver(self, browser_name, command_executor, headless, proxy) -> webdriver.Remote: """獲取遠程瀏覽器實例 :param browser_name: 瀏覽器類型 :param command_executor: HUB 地址 :param headless: 使用無頭瀏覽器 :param proxy: 代理 :return: 瀏覽器實例 """ if browser_name.upper() == "CHROME": options = webdriver.ChromeOptions() elif browser_name.upper() == "FIREFOX": options = webdriver.FirefoxOptions() elif browser_name.upper() == "IE": options = webdriver.IeOptions() else: self.logger.error(f"瀏覽器類型錯誤:{browser_name}") raise ValueError(f"瀏覽器類型錯誤:{browser_name}") if proxy is not None: options.add_argument(f"--proxy-server={proxy}") # 無頭瀏覽器 options.headless = headless driver = webdriver.Remote( command_executor=command_executor, options=options ) return driver def quit(self): """退出瀏覽器""" self.logger.info(f"關閉瀏覽器:{self.driver.name}") self.driver.quit() def get(self, url: str, new: bool = False): """打開 url :param url: 網址 :param new: 是否新窗口打開 :return: None """ if new: self.logger.info(f"新窗口打開 url:{url}") self.driver.execute_script(f"window.open('{url}')") else: self.logger.info(f"當前窗口打開 url:{url}") self.driver.get(url) def get_session_id(self): """返回當前瀏覽器 session id""" session_id = self.driver.session_id self.logger.info(f"當前瀏覽器 session_id:{session_id}") return session_id def get_source(self) -> str: """獲取當前頁面HTML源程式碼""" page_source = self.driver.page_source self.logger.info(f"當前頁面源程式碼:n{page_source}") return page_source def get_title(self): """返回當前頁面的標題""" title = self.driver.title self.logger.info(f"當前頁面的標題:{title}") return title def get_current_url(self): """返回當前頁面的URL""" current_url = self.driver.current_url self.logger.info(f"當前頁面URL:{current_url}") return current_url def reload_page(self): """模擬用戶重新載入頁面""" self.logger.info("刷新頁面") self.driver.refresh()瀏覽器配置文件:
------browser.ini文件
[local] local_browser = False wait_time = 10 [browser] name = chrome ;name = firefox ;name = ie window_width = window_height = [grid] command_executor = http://127.0.0.1:4444/wd/hub headless = False proxy =
rw_ini.py讀取配置文件請查看下面鏈接: https://www.cnblogs.com/CesareZhang/p/10738541.html
