Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Standalone Browser 自动化工具包

这是一个强大的浏览器自动化工具包,允许您通过Python控制Chrome浏览器执行各种操作。

功能特性

  1. 多样的元素定位方式:

    • CSS选择器
    • XPath表达式
    • 坐标定位
    • 属性定位
    • Shadow DOM定位
    • iframe内元素定位
    • 相对元素定位
  2. 丰富的浏览器操作:

    • 标签页管理(打开、关闭、切换)
    • 页面导航(前进、后退、刷新)
    • 元素操作(点击、输入、获取文本)
    • 表格数据提取
    • 截图功能
    • Cookie操作
    • JavaScript执行

安装和配置

  1. 安装依赖:

    pip install requests
    
  2. 在Chrome浏览器中安装配套的扩展程序

  3. 启动桥接服务器

快速开始

from standalone_browser import BrowserAutomation

# 创建浏览器实例
browser = BrowserAutomation(browser_type="chrome")

# 等待浏览器连接
browser.wait_ready()

# 打开网页
browser.open_new_tab("https://www.google.com")

# 定位并操作元素
search_box = browser.generate_element("cssSelector", "input[name='q']")
browser.input(search_box, "astron rpa")

# 点击搜索按钮
search_button = browser.generate_element("cssSelector", "input[type='submit']")
browser.click(search_button)

元素定位方法详解

1. CSS选择器定位

最常用的方式,语法简洁且功能强大:

# 通过标签名定位
element = browser.generate_element("cssSelector", "input")

# 通过ID定位
element = browser.generate_element("cssSelector", "#search-box")

# 通过类名定位
element = browser.generate_element("cssSelector", ".btn-primary")

# 通过属性定位
element = browser.generate_element("cssSelector", "input[name='username']")

2. XPath定位

适合复杂的元素定位场景:

# 绝对路径定位
element = browser.find_element_by_xpath("/html/body/div[1]/form/input[1]")

# 相对路径定位
element = browser.find_element_by_xpath("//input[@name='username']")

# 通过文本内容定位
element = browser.find_element_by_xpath("//button[text()='登录']")

3. 坐标定位

适用于无法通过其他方式定位的特殊场景:

# 通过屏幕坐标定位元素
element = browser.find_element_by_coordinates(100, 200)

4. 属性定位

直接通过属性名称和值定位元素:

# 通过属性名和值定位
element = browser.find_element_by_attribute("data-id", "user-panel")

5. Shadow DOM定位

处理现代Web应用中的Shadow DOM元素:

# 在Shadow DOM中定位元素
element = browser.find_element_in_shadow_dom("shadow-path-to-element")

6. iframe内元素定位

专门用于处理嵌套在iframe中的元素:

# 在指定iframe中定位元素
element = browser.find_element_in_iframe("//iframe[@id='frame1']", "//button[@id='submit']")

7. 相对元素定位

基于已有元素定位其关联元素:

# 定位基准元素
base_element = browser.generate_element("cssSelector", ".form-group")

# 定位父元素
parent = browser.find_relative_element(base_element, "parent")

# 定位下一个兄弟元素
next_sibling = browser.find_relative_element(base_element, "nextSibling")

# 定位子元素
child = browser.find_relative_element(base_element, "child")

常见使用示例

查看 examples 目录中的示例代码:

  1. full_flow.py - 完整流程示例
  2. run_demo.py - 基础使用示例
  3. element_locators_example.py - 元素定位方法示例

API参考

BrowserAutomation 类

这是主要的操作类,提供了所有的浏览器自动化功能。

初始化方法

browser = BrowserAutomation(browser_type: str, bridge_url: str = "http://127.0.0.1:9082")

参数:

  • browser_type: 浏览器类型,如 "chrome"
  • bridge_url: 桥接服务器地址

主要方法

浏览器控制
  • wait_ready(timeout: int = 30) - 等待浏览器连接就绪
  • open_new_tab(url: str) - 打开新标签页
  • update_tab(url: str) - 更新当前标签页
  • reload_tab() - 重新加载当前标签页
  • close_tab(url: str = None, tab_id: int = None) - 关闭标签页
  • switch_tab(url: str = None, title: str = None, tab_id: int = None) - 切换标签页
  • get_all_tabs() - 获取所有标签页信息
  • backward() - 后退
  • forward() - 前进
  • max_window() - 最大化窗口
  • min_window() - 最小化窗口
  • get_tab_id() - 获取当前标签页ID
元素定位
  • generate_element(locate_type: str, value: str) - 生成元素定位信息
  • find_element_by_xpath(xpath: str) - 通过XPath查找元素
  • find_element_by_attribute(attribute_name: str, attribute_value: str) - 通过属性查找元素
  • find_element_by_coordinates(x: int, y: int) - 通过坐标查找元素
  • find_element_in_shadow_dom(shadow_path: str) - 在Shadow DOM中查找元素
  • find_element_in_iframe(iframe_xpath: str, element_xpath: str) - 在iframe中查找元素
  • find_relative_element(base_element: dict, relative_type: str, **kwargs) - 查找相对元素
元素操作
  • element_is_render(element_path: dict) - 检查元素是否已渲染
  • scroll_into_view(element_path: dict) - 滚动到元素可见位置
  • get_element_pos(element_path: dict) - 获取元素位置
  • click(element_path: dict, button_type: str = "click") - 点击元素
  • input(element_path: dict, text: str) - 在元素中输入文本
  • get_text(element_path: dict) - 获取元素文本内容
  • get_attrs(element_path: dict, operation: str, attr_name: str = "") - 获取元素属性
  • set_attr(element_path: dict, attr_name: str, attr_value: str) - 设置元素属性
  • get_checked(element_path: dict) - 获取复选框选中状态
  • set_checked(element_path: dict, checked: bool, reverse: bool = False) - 设置复选框选中状态
表格操作
  • get_table_data(element_path: dict) - 获取表格数据
  • element_is_table(element_path: dict) - 检查元素是否为表格
  • table_data_batch(element_path: dict) - 批量获取表格数据
  • table_column_data_batch(element_path: dict) - 批量获取表格列数据
页面操作
  • load_complete() - 检查页面是否加载完成
  • get_frames() - 获取页面所有框架信息
  • reset_zoom() - 重置页面缩放级别
  • capture_screen() - 截取屏幕
  • capture_page() - 截取整个页面
  • element_shot(element_path: dict) - 截取元素图片
  • scroll_window(element_path: dict = None, scroll_to: str = "top", axis: str = "y", scroll_x: int = 0, scroll_y: int = 0) - 滚动窗口
JavaScript执行
  • run_js(code: str, frame_url: str = None) - 执行JavaScript代码
Cookie操作
  • get_cookie(url: str, name: str = None) - 获取Cookie
  • remove_cookie(url: str, name: str) - 移除Cookie

错误处理

工具包定义了 PluginError 异常类来处理可能出现的错误:

from standalone_browser import BrowserAutomation, PluginError

try:
    browser = BrowserAutomation("chrome")
    element = browser.generate_element("cssSelector", ".non-existent")
except PluginError as e:
    print(f"操作失败: {e.code} - {e}")

许可证

MIT License

About

连接晓悟rpa浏览器插件控制浏览器

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages