这是一个强大的浏览器自动化工具包,允许您通过Python控制Chrome浏览器执行各种操作。
-
多样的元素定位方式:
- CSS选择器
- XPath表达式
- 坐标定位
- 属性定位
- Shadow DOM定位
- iframe内元素定位
- 相对元素定位
-
丰富的浏览器操作:
- 标签页管理(打开、关闭、切换)
- 页面导航(前进、后退、刷新)
- 元素操作(点击、输入、获取文本)
- 表格数据提取
- 截图功能
- Cookie操作
- JavaScript执行
-
安装依赖:
pip install requests -
在Chrome浏览器中安装配套的扩展程序
-
启动桥接服务器
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)最常用的方式,语法简洁且功能强大:
# 通过标签名定位
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']")适合复杂的元素定位场景:
# 绝对路径定位
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()='登录']")适用于无法通过其他方式定位的特殊场景:
# 通过屏幕坐标定位元素
element = browser.find_element_by_coordinates(100, 200)直接通过属性名称和值定位元素:
# 通过属性名和值定位
element = browser.find_element_by_attribute("data-id", "user-panel")处理现代Web应用中的Shadow DOM元素:
# 在Shadow DOM中定位元素
element = browser.find_element_in_shadow_dom("shadow-path-to-element")专门用于处理嵌套在iframe中的元素:
# 在指定iframe中定位元素
element = browser.find_element_in_iframe("//iframe[@id='frame1']", "//button[@id='submit']")基于已有元素定位其关联元素:
# 定位基准元素
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 目录中的示例代码:
- full_flow.py - 完整流程示例
- run_demo.py - 基础使用示例
- element_locators_example.py - 元素定位方法示例
这是主要的操作类,提供了所有的浏览器自动化功能。
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)- 滚动窗口
run_js(code: str, frame_url: str = None)- 执行JavaScript代码
get_cookie(url: str, name: str = None)- 获取Cookieremove_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