# -*- coding:utf-8 -*- """ @Author : g1879 @Contact : g1879@qq.com @File : chromium_element.py """ from pathlib import Path from typing import Union, Tuple, List, Any from .chromium_base import ChromiumBase from .chromium_page import ChromiumPage from .web_page import WebPage from .base import DrissionElement, BaseElement from .session_element import SessionElement class ChromiumElement(DrissionElement): """ChromePage页面对象中的元素对象""" def __init__(self, page: ChromiumBase, node_id: str = ..., obj_id: str = ...): self._tag: str = ... self.page: Union[ChromiumPage, WebPage] = ... self._node_id: str = ... self._obj_id: str = ... self._doc_id: str = ... self._scroll: ChromeScroll = ... self._select: ChromeSelect = ... def __repr__(self) -> str: ... def __call__(self, loc_or_str: Union[Tuple[str, str], str], timeout: float = ...) -> Union['ChromiumElement', str, None]: ... @property def tag(self) -> str: ... @property def html(self) -> str: ... @property def inner_html(self) -> str: ... @property def attrs(self) -> dict: ... @property def text(self) -> str: ... @property def raw_text(self) -> str: ... # -----------------d模式独有属性------------------- @property def obj_id(self) -> str: ... @property def node_id(self) -> str: ... @property def doc_id(self) -> str: ... @property def size(self) -> dict: ... @property def client_location(self) -> Union[dict, None]: ... @property def client_midpoint(self) -> Union[dict, None]: ... @property def location(self) -> Union[dict, None]: ... @property def midpoint(self) -> dict: ... @property def _client_click_point(self) -> Union[dict, None]: ... @property def _click_point(self) -> Union[dict, None]: ... @property def shadow_root(self) -> Union[None, 'ChromiumShadowRootElement']: ... @property def sr(self): ... @property def pseudo_before(self) -> str: ... @property def pseudo_after(self) -> str: ... @property def scroll(self) -> 'ChromeScroll': ... def parent(self, level_or_loc: Union[tuple, str, int] = ...) -> Union['ChromiumElement', None]: ... def prev(self, filter_loc: Union[tuple, str] = ..., index: int = ..., timeout: float = ...) -> Union['ChromiumElement', str, None]: ... def next(self, filter_loc: Union[tuple, str] = ..., index: int = ..., timeout: float = ...) -> Union['ChromiumElement', str, None]: ... def before(self, filter_loc: Union[tuple, str] = ..., index: int = ..., timeout: float = ...) -> Union['ChromiumElement', str, None]: ... def after(self, filter_loc: Union[tuple, str] = ..., index: int = ..., timeout: float = ...) -> Union['ChromiumElement', str, None]: ... def prevs(self, filter_loc: Union[tuple, str] = ..., timeout: float = ...) -> List[Union['ChromiumElement', str]]: ... def nexts(self, filter_loc: Union[tuple, str] = ..., timeout: float = ...) -> List[Union['ChromiumElement', str]]: ... def befores(self, filter_loc: Union[tuple, str] = ..., timeout: float = ...) -> List[Union['ChromiumElement', str]]: ... def wait_ele(self, loc_or_ele: Union[str, tuple, 'ChromiumElement'], timeout: float = ...) -> 'ChromiumElementWaiter': ... @property def select(self) -> 'ChromeSelect': ... @property def is_selected(self) -> bool: ... @property def is_displayed(self) -> bool: ... @property def is_enabled(self) -> bool: ... @property def is_alive(self) -> bool: ... @property def is_in_viewport(self) -> bool: ... def attr(self, attr: str) -> Union[str, None]: ... def set_attr(self, attr: str, value: str) -> None: ... def remove_attr(self, attr: str) -> None: ... def prop(self, prop: str) -> Union[str, int, None]: ... def set_prop(self, prop: str, value: str) -> None: ... def set_innerHTML(self, html: str) -> None: ... def run_script(self, script: str, as_expr: bool = ..., *args: Any) -> Any: ... def run_async_script(self, script: str, as_expr: bool = ..., *args: Any) -> None: ... def ele(self, loc_or_str: Union[Tuple[str, str], str], timeout: float = ...) -> Union['ChromiumElement', str, None]: ... def eles(self, loc_or_str: Union[Tuple[str, str], str], timeout: float = ...) -> List[Union['ChromiumElement', str]]: ... def s_ele(self, loc_or_str: Union[Tuple[str, str], str] = ...) -> Union[SessionElement, str, None]: ... def s_eles(self, loc_or_str: Union[Tuple[str, str], str] = ...) -> List[Union[SessionElement, str]]: ... def _ele(self, loc_or_str: Union[Tuple[str, str], str], timeout: float = ..., single: bool = ..., relative: bool = ...) \ -> Union['ChromiumElement', str, None, List[Union['ChromiumElement', str]]]: ... def style(self, style: str, pseudo_ele: str = ...) -> str: ... def get_src(self) -> Union[bytes, str, None]: ... def save(self, path: [str, bool] = ..., rename: str = ...) -> None: ... def get_screenshot(self, path: [str, Path] = ..., as_bytes: [bool, str] = ...) -> Union[str, bytes]: ... def input(self, vals: Union[str, tuple, list], clear: bool = ...) -> None: ... def _set_file_input(self, files: Union[str, list, tuple]) -> None: ... def clear(self, by_js: bool = ...) -> None: ... def click(self, by_js: bool = ..., retry: bool = ..., timeout: float = ...) -> bool: ... def click_at(self, offset_x: Union[int, str] = ..., offset_y: Union[int, str] = ..., button: str = ...) -> None: ... def r_click(self) -> None: ... def r_click_at(self, offset_x: Union[int, str] = ..., offset_y: Union[int, str] = ...) -> None: ... def _click(self, client_x: int, client_y: int, button: str = ...) -> None: ... def hover(self, offset_x: int = ..., offset_y: int = ...) -> None: ... def drag(self, offset_x: int = ..., offset_y: int = ..., speed: int = ..., shake: bool = ...) -> None: ... def drag_to(self, ele_or_loc: Union[tuple, 'ChromiumElement'], speed: int = ..., shake: bool = ...) -> None: ... def _get_obj_id(self, node_id) -> str: ... def _get_node_id(self, obj_id) -> str: ... def _get_ele_path(self, mode) -> str: ... def _get_client_rect(self, quad: str) -> Union[dict, None]: ... def _get_absolute_rect(self, x, y) -> dict: ... class ChromiumShadowRootElement(BaseElement): """ChromiumShadowRootElement是用于处理ShadowRoot的类,使用方法和ChromiumElement基本一致""" def __init__(self, parent_ele: ChromiumElement, obj_id: str = ..., backend_id: str = ...): self._obj_id: str = ... self._node_id: str = ... self.page: ChromiumPage = ... self.parent_ele: ChromiumElement = ... def __repr__(self) -> str: ... def __call__(self, loc_or_str: Union[Tuple[str, str], str], timeout: float = ...) -> Union[ChromiumElement, None]: ... @property def is_enabled(self) -> bool: ... @property def is_alive(self) -> bool: ... @property def node_id(self) -> str: ... @property def obj_id(self) -> str: ... @property def tag(self) -> str: ... @property def html(self) -> str: ... @property def inner_html(self) -> str: ... def run_script(self, script: str, as_expr: bool = ..., *args: Any) -> Any: ... def run_async_script(self, script: str, as_expr: bool = ..., *args: Any) -> None: ... def parent(self, level_or_loc: Union[str, int] = ...) -> ChromiumElement: ... def next(self, filter_loc: Union[tuple, str] = ..., index: int = ...) -> Union[ChromiumElement, str, None]: ... def before(self, filter_loc: Union[tuple, str] = ..., index: int = ...) -> Union[ChromiumElement, str, None]: ... def after(self, filter_loc: Union[tuple, str] = ..., index: int = ...) -> Union[ChromiumElement, str, None]: ... def nexts(self, filter_loc: Union[tuple, str] = ...) -> List[Union[ChromiumElement, str]]: ... def befores(self, filter_loc: Union[tuple, str] = ...) -> List[Union[ChromiumElement, str]]: ... def afters(self, filter_loc: Union[tuple, str] = ...) -> List[Union[ChromiumElement, str]]: ... def ele(self, loc_or_str: Union[Tuple[str, str], str], timeout: float = ...) -> Union[ChromiumElement, None]: ... def eles(self, loc_or_str: Union[Tuple[str, str], str], timeout: float = ...) -> List[ChromiumElement]: ... def s_ele(self, loc_or_str: Union[Tuple[str, str], str] = ...) -> Union[SessionElement, str, None]: ... def s_eles(self, loc_or_str: Union[Tuple[str, str], str]) -> List[SessionElement]: ... def _ele(self, loc_or_str: Union[Tuple[str, str], str], timeout: float = ..., single: bool = ..., relative: bool = ...) -> Union['ChromiumElement', None, List[ChromiumElement]]: ... def _get_node_id(self, obj_id: str) -> str: ... def _get_obj_id(self, back_id: str) -> str: ... def _get_backend_id(self, node_id: str) -> str: ... def make_chromium_ele(ele: ChromiumElement, loc: Union[str, Tuple[str, str]], single: bool = ..., timeout: float = ..., relative: bool = ...) -> Union[ChromiumElement, str, None, List[Union[ChromiumElement, str]]]: ... def _find_by_xpath(ele: ChromiumElement, xpath: str, single: bool, timeout: float, relative: bool = ...) -> Union[ChromiumElement, List[ChromiumElement], None]: ... def _find_by_css(ele: ChromiumElement, selector: str, single: bool, timeout: float) -> Union[ChromiumElement, List[ChromiumElement], None]: ... def _make_chromium_ele(page: ChromiumBase, node_id: str = ..., obj_id: str = ...) -> ChromiumElement: ... def _make_js_for_find_ele_by_xpath(xpath: str, type_txt: str, node_txt: str) -> str: ... def run_script(page_or_ele: Union[ChromiumBase, ChromiumElement, ChromiumShadowRootElement], script: str, as_expr: bool = ..., timeout: float = ..., args: tuple = ...) -> Any: ... def _parse_js_result(page: ChromiumBase, ele: ChromiumElement, result: dict): ... def _convert_argument(arg: Any) -> dict: ... def _send_enter(ele: ChromiumElement) -> None: ... def _send_key(ele: ChromiumElement, modifier: int, key: str) -> None: ... def _offset_scroll(ele: ChromiumElement, offset_x: int, offset_y: int) -> tuple: ... class ChromeScroll(object): """用于滚动的对象""" def __init__(self, page_or_ele: Union[ChromiumBase, ChromiumElement]): self.t1: str = ... self.t2: str = ... self.obj_id: str = ... self.page: ChromiumPage = ... def _run_script(self, js: str): ... def to_top(self) -> None: ... def to_bottom(self) -> None: ... def to_half(self) -> None: ... def to_rightmost(self) -> None: ... def to_leftmost(self) -> None: ... def to_location(self, x: int, y: int) -> None: ... def up(self, pixel: int = ...) -> None: ... def down(self, pixel: int = ...) -> None: ... def left(self, pixel: int = ...) -> None: ... def right(self, pixel: int = ...) -> None: ... class ChromeSelect(object): """ChromeSelect 类专门用于处理 d 模式下 select 标签""" def __init__(self, ele: ChromiumElement): self._ele: ChromiumElement = ... def __call__(self, text_or_index: Union[str, int, list, tuple], timeout: float = None) -> bool: ... @property def is_multi(self) -> bool: ... @property def options(self) -> List[ChromiumElement]: ... @property def selected_option(self) -> Union[ChromiumElement, None]: ... @property def selected_options(self) -> List[ChromiumElement]: ... def clear(self) -> None: ... def by_text(self, text: Union[str, list, tuple], timeout: float = ...) -> bool: ... def by_value(self, value: Union[str, list, tuple], timeout: float = ...) -> bool: ... def by_index(self, index: Union[int, list, tuple], timeout: float = ...) -> bool: ... def cancel_by_text(self, text: Union[str, list, tuple], timeout: float = ...) -> bool: ... def cancel_by_value(self, value: Union[str, list, tuple], timeout: float = ...) -> bool: ... def cancel_by_index(self, index: Union[int, list, tuple], timeout: float = ...) -> bool: ... def invert(self) -> None: ... def _select(self, text_value_index: Union[str, int, list, tuple] = ..., para_type: str = ..., deselect: bool = ..., timeout: float = ...) -> bool: ... def _select_multi(self, text_value_index: Union[list, tuple] = ..., para_type: str = ..., deselect: bool = ...) -> bool: ... class ChromiumElementWaiter(object): """等待元素在dom中某种状态,如删除、显示、隐藏""" def __init__(self, page_or_ele, loc_or_ele: Union[str, tuple, ChromiumElement], timeout: float = ...): self.loc_or_ele: Union[str, tuple, ChromiumElement] = ... self.timeout: float = ... self.driver: Union[ChromiumPage, ChromiumPage] = ... def delete(self) -> bool: ... def display(self) -> bool: ... def hidden(self) -> bool: ... def _wait_ele(self, mode: str) -> Union[None, bool]: ...