From a67c1846c1f961de4ea44365c8c543ecc6aa42d7 Mon Sep 17 00:00:00 2001 From: g1879 Date: Thu, 18 Jun 2020 15:01:56 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E4=BF=AE=E6=94=B9=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD=202.MixPage=E4=B8=ADself.driver?= =?UTF-8?q?=E5=92=8Cself.session=E8=B0=83=E7=94=A8self.drission=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=AF=B9=E8=B1=A1=E3=80=82MixPage=E4=B8=AD=E4=B8=8D?= =?UTF-8?q?=E5=9C=A8=E4=BF=9D=E5=AD=98driver=E5=92=8Csession=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/driver_page.py | 42 +++++++++---------------------------- DrissionPage/mix_page.py | 19 ++++++----------- 2 files changed, 16 insertions(+), 45 deletions(-) diff --git a/DrissionPage/driver_page.py b/DrissionPage/driver_page.py index a692fdb..a51fefe 100644 --- a/DrissionPage/driver_page.py +++ b/DrissionPage/driver_page.py @@ -5,7 +5,6 @@ @File : driver_page.py """ from glob import glob -# from time import sleep from typing import Union, List, Any from urllib.parse import quote @@ -13,8 +12,7 @@ from selenium.common.exceptions import NoAlertPresentException from selenium.webdriver.chrome.webdriver import WebDriver from selenium.webdriver.remote.webelement import WebElement -from .common import get_loc_from_str, avoid_duplicate_name # , clean_folder -# from .config import OptionsManager +from .common import get_loc_from_str, avoid_duplicate_name from .driver_element import DriverElement, execute_driver_find @@ -35,10 +33,10 @@ class DriverPage(object): @property def url(self) -> Union[str, None]: """当前网页url""" - if not self._driver or not self._driver.current_url.startswith('http'): + if not self._driver or not self.driver.current_url.startswith('http'): return None else: - return self._driver.current_url + return self.driver.current_url @property def html(self) -> str: @@ -58,7 +56,7 @@ class DriverPage(object): @property def title(self) -> str: """获取网页title""" - return self._driver.title + return self.driver.title def get(self, url: str, go_anyway: bool = False) -> Union[None, bool]: """跳转到url""" @@ -113,6 +111,12 @@ class DriverPage(object): handle_list = self.driver.window_handles return handle_list.index(handle) + def create_tab(self): + """新建并定位到一个标签页,该标签页在最后面""" + self.to_tab(-1) + self.run_script('window.open("");') + self.to_tab(-1) + def close_current_tab(self) -> None: """关闭当前标签页""" self.driver.close() @@ -164,37 +168,11 @@ class DriverPage(object): def screenshot(self, path: str, filename: str = None) -> str: """获取网页截图""" - # tmp_path = OptionsManager().get_value('paths', 'global_tmp_path') - # clean_folder(tmp_path) name = filename or self.title name = avoid_duplicate_name(path, f'{name}.png') img_path = f'{path}\\{name}' - self.driver.save_screenshot(img_path) # TODO: 实现全页截图 - # self.set_window_size() - # self.scroll_to('top') - # window_height = self.driver.get_window_size()['height'] # 窗口高度 - # - # page_height = self.driver.execute_script('return document.documentElement.scrollHeight') # 页面高度 - # - # if page_height <= window_height: - # self.driver.save_screenshot(img_path) - # else: - # from PIL import Image - # import numpy as np - # self.driver.save_screenshot(f'{tmp_path}\\{name}.png') - # n = page_height // window_height # 需要滚动的次数 - # base_mat = np.atleast_2d(Image.open(f'{tmp_path}\\{name}.png')) # 打开截图并转为二维矩阵 - # - # for i in range(n): - # self.driver.execute_script(f'document.documentElement.scrollTop={window_height * (i + 1)};') - # sleep(.5) - # self.driver.save_screenshot(f'{tmp_path}\\{name}_{i}.png') # 保存截图 - # mat = np.atleast_2d(Image.open(f'{tmp_path}\\{name}_{i}.png')) # 打开截图并转为二维矩阵 - # base_mat = np.append(base_mat, mat, axis=0) # 拼接图片的二维矩阵 - # Image.fromarray(base_mat).save(img_path) - # clean_folder(tmp_path) return name def scroll_to_see(self, loc_or_ele: Union[str, tuple, WebElement, DriverElement]) -> None: diff --git a/DrissionPage/mix_page.py b/DrissionPage/mix_page.py index 25a4348..64d6d3e 100644 --- a/DrissionPage/mix_page.py +++ b/DrissionPage/mix_page.py @@ -49,9 +49,9 @@ class MixPage(Null, SessionPage, DriverPage): self._url_available = None self._mode = mode if mode == 's': - self._session = self._drission.session + self._session = True elif mode == 'd': - self._driver = self._drission.driver + self._driver = True else: raise KeyError("mode must be 'd' or 's'.") @@ -93,7 +93,7 @@ class MixPage(Null, SessionPage, DriverPage): elif self._mode == 's': # d转s self._url = self.session_url if self._session is None: - self._session = self._drission.session + self._session = True if self._driver: self.cookies_to_session() if go: @@ -107,25 +107,18 @@ class MixPage(Null, SessionPage, DriverPage): @property def driver(self) -> WebDriver: """返回driver对象,如没有则创建 - 每次访问时切换到d模式,主要用于独有函数及外部调用 + 每次访问时切换到d模式,用于独有函数及外部调用 :return:selenium的WebDriver对象 """ - # TODO: 改成每次获取drission的driver - if self._driver is None: - self._driver = self._drission.driver self.change_mode('d') - return self._driver + return self._drission.driver @property def session(self) -> HTMLSession: """返回session对象,如没有则创建 - 每次访问时切换到s模式,主要用于独有函数及外部调用 :return:requests-html的HTMLSession对象 """ - if self._session is None: - self._session = self._drission.session - # self.change_mode('s') - return self._session + return self._drission.session @property def response(self) -> Response: