mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
1.添加修改代理功能
2.MixPage中self.driver和self.session调用self.drission中的对象。MixPage中不在保存driver和session对象
This commit is contained in:
parent
a067c9444a
commit
a67c1846c1
@ -5,7 +5,6 @@
|
|||||||
@File : driver_page.py
|
@File : driver_page.py
|
||||||
"""
|
"""
|
||||||
from glob import glob
|
from glob import glob
|
||||||
# from time import sleep
|
|
||||||
from typing import Union, List, Any
|
from typing import Union, List, Any
|
||||||
from urllib.parse import quote
|
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.chrome.webdriver import WebDriver
|
||||||
from selenium.webdriver.remote.webelement import WebElement
|
from selenium.webdriver.remote.webelement import WebElement
|
||||||
|
|
||||||
from .common import get_loc_from_str, avoid_duplicate_name # , clean_folder
|
from .common import get_loc_from_str, avoid_duplicate_name
|
||||||
# from .config import OptionsManager
|
|
||||||
from .driver_element import DriverElement, execute_driver_find
|
from .driver_element import DriverElement, execute_driver_find
|
||||||
|
|
||||||
|
|
||||||
@ -35,10 +33,10 @@ class DriverPage(object):
|
|||||||
@property
|
@property
|
||||||
def url(self) -> Union[str, None]:
|
def url(self) -> Union[str, None]:
|
||||||
"""当前网页url"""
|
"""当前网页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
|
return None
|
||||||
else:
|
else:
|
||||||
return self._driver.current_url
|
return self.driver.current_url
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def html(self) -> str:
|
def html(self) -> str:
|
||||||
@ -58,7 +56,7 @@ class DriverPage(object):
|
|||||||
@property
|
@property
|
||||||
def title(self) -> str:
|
def title(self) -> str:
|
||||||
"""获取网页title"""
|
"""获取网页title"""
|
||||||
return self._driver.title
|
return self.driver.title
|
||||||
|
|
||||||
def get(self, url: str, go_anyway: bool = False) -> Union[None, bool]:
|
def get(self, url: str, go_anyway: bool = False) -> Union[None, bool]:
|
||||||
"""跳转到url"""
|
"""跳转到url"""
|
||||||
@ -113,6 +111,12 @@ class DriverPage(object):
|
|||||||
handle_list = self.driver.window_handles
|
handle_list = self.driver.window_handles
|
||||||
return handle_list.index(handle)
|
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:
|
def close_current_tab(self) -> None:
|
||||||
"""关闭当前标签页"""
|
"""关闭当前标签页"""
|
||||||
self.driver.close()
|
self.driver.close()
|
||||||
@ -164,37 +168,11 @@ class DriverPage(object):
|
|||||||
|
|
||||||
def screenshot(self, path: str, filename: str = None) -> str:
|
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 = filename or self.title
|
||||||
name = avoid_duplicate_name(path, f'{name}.png')
|
name = avoid_duplicate_name(path, f'{name}.png')
|
||||||
img_path = f'{path}\\{name}'
|
img_path = f'{path}\\{name}'
|
||||||
|
|
||||||
self.driver.save_screenshot(img_path)
|
self.driver.save_screenshot(img_path)
|
||||||
# TODO: 实现全页截图
|
# 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
|
return name
|
||||||
|
|
||||||
def scroll_to_see(self, loc_or_ele: Union[str, tuple, WebElement, DriverElement]) -> None:
|
def scroll_to_see(self, loc_or_ele: Union[str, tuple, WebElement, DriverElement]) -> None:
|
||||||
|
@ -49,9 +49,9 @@ class MixPage(Null, SessionPage, DriverPage):
|
|||||||
self._url_available = None
|
self._url_available = None
|
||||||
self._mode = mode
|
self._mode = mode
|
||||||
if mode == 's':
|
if mode == 's':
|
||||||
self._session = self._drission.session
|
self._session = True
|
||||||
elif mode == 'd':
|
elif mode == 'd':
|
||||||
self._driver = self._drission.driver
|
self._driver = True
|
||||||
else:
|
else:
|
||||||
raise KeyError("mode must be 'd' or 's'.")
|
raise KeyError("mode must be 'd' or 's'.")
|
||||||
|
|
||||||
@ -93,7 +93,7 @@ class MixPage(Null, SessionPage, DriverPage):
|
|||||||
elif self._mode == 's': # d转s
|
elif self._mode == 's': # d转s
|
||||||
self._url = self.session_url
|
self._url = self.session_url
|
||||||
if self._session is None:
|
if self._session is None:
|
||||||
self._session = self._drission.session
|
self._session = True
|
||||||
if self._driver:
|
if self._driver:
|
||||||
self.cookies_to_session()
|
self.cookies_to_session()
|
||||||
if go:
|
if go:
|
||||||
@ -107,25 +107,18 @@ class MixPage(Null, SessionPage, DriverPage):
|
|||||||
@property
|
@property
|
||||||
def driver(self) -> WebDriver:
|
def driver(self) -> WebDriver:
|
||||||
"""返回driver对象,如没有则创建
|
"""返回driver对象,如没有则创建
|
||||||
每次访问时切换到d模式,主要用于独有函数及外部调用
|
每次访问时切换到d模式,用于独有函数及外部调用
|
||||||
:return:selenium的WebDriver对象
|
:return:selenium的WebDriver对象
|
||||||
"""
|
"""
|
||||||
# TODO: 改成每次获取drission的driver
|
|
||||||
if self._driver is None:
|
|
||||||
self._driver = self._drission.driver
|
|
||||||
self.change_mode('d')
|
self.change_mode('d')
|
||||||
return self._driver
|
return self._drission.driver
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def session(self) -> HTMLSession:
|
def session(self) -> HTMLSession:
|
||||||
"""返回session对象,如没有则创建
|
"""返回session对象,如没有则创建
|
||||||
每次访问时切换到s模式,主要用于独有函数及外部调用
|
|
||||||
:return:requests-html的HTMLSession对象
|
:return:requests-html的HTMLSession对象
|
||||||
"""
|
"""
|
||||||
if self._session is None:
|
return self._drission.session
|
||||||
self._session = self._drission.session
|
|
||||||
# self.change_mode('s')
|
|
||||||
return self._session
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def response(self) -> Response:
|
def response(self) -> Response:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user