基于Chrome140的X账号自动化(关键词浏览)——脚本撰写(二)

引言

在上一篇文章《基于Chrome140的X账号自动化(关键词浏览)------需求分析&环境搭建(一)》中,我们完成了开发环境的准备工作,包括Python环境配置、uv包管理器安装、Playwright框架部署以及Chrome浏览器的配置。现在,我们将进入核心开发阶段,基于RPA框架构建X自动化浏览系统。

本文将详细介绍如何使用基于动作执行器(action_executor)的RPA框架,实现X的智能浏览、交互和状态管理。通过状态机模式和权重化随机动作系统,我们将构建一个既自然又高效的自动化解决方案。

本教程将展示业务核心内容代码,框架部分将不作为展示。

1. RPA框架架构设计

核心框架结构

基于您提供的代码,我们的X自动化系统采用了成熟的RPA框架设计,具有以下核心特性:

复制代码
from stubs.rpa import *
from functools import partial
from typing import Tuple
import random
import time

# 核心组件说明
# - CoreBrowsePage: 浏览器页面基类
# - CorePageObject: 页面对象基类  
# - action_exector: 动作执行器装饰器
# - start_main_page_process: 主流程启动器

1.1 状态机设计模式

系统采用状态机模式管理不同的页面状态,每个状态对应特定的动作集合:

  • home状态:Facebook首页浏览
  • detail状态:帖子详情页交互
  • unknown状态:异常状态处理

2. 核心动作系统

2.1智能滚动动作

滚动是模拟真实用户浏览行为的基础动作,我们实现了支持随机距离、持续时间和方向的智能滚动系统。

复制代码
@action_exector
def scroll_action(page: CoreBrowsePage, distance: Tuple[int, int], 
                 duration: Tuple[float, float], scroll_down_probability: int):
    """
    智能滚动动作执行器
    
    Args:
        page: 浏览器页面对象
        distance: 滚动距离范围 (min_distance, max_distance)
        duration: 滚动持续时间范围 (min_duration, max_duration)  
        scroll_down_probability: 向下滚动概率 (0-100)
    """
    # 随机生成滚动参数
    _distance = random.randint(*distance)
    _duration = random.uniform(*duration)
    
    # 获取页面主体元素
    _scroll_locator = page.page.locator('body')
    
    # 根据概率决定滚动方向
    if random.randint(0, 100) > scroll_down_probability:
        # 向上滚动(负值)
        _distance = -_distance
        page.logger.info(f"执行向上滚动: {abs(_distance)}px, 持续时间: {_duration:.2f}s")
    else:
        page.logger.info(f"执行向下滚动: {_distance}px, 持续时间: {_duration:.2f}s")

    # 执行平滑滚动
    smooth_scroll(page.page, _distance, _duration)

2.2 停留动作模拟

停留动作模拟用户阅读和思考的时间,是增强真实性的重要组件:

复制代码
@action_exector
def stay_action(page: CoreBrowsePage, stay_time: Tuple[int, int]):
    """
    用户停留动作模拟器
    
    模拟真实用户在浏览过程中的阅读、思考停顿时间
    
    Args:
        page: 浏览器页面对象
        stay_time: 停留时间范围 (min_seconds, max_seconds)
    """
    # 随机生成停留时间
    _stay_duration = random.uniform(*stay_time)
    
    page.logger.info(f"用户停留思考: {_stay_duration:.2f}秒")
    
    # 执行等待
    time.sleep(_stay_duration)
    # 如果需要截图可以添加截图记录执行
    page.save_html_and_screenshot() # 保存html内容和截图
    page.logger.info("停留结束,继续浏览")

3. 内容交互系统

3.1智能帖子选择与点击

内容交互是X自动化的核心功能,我们实现了智能的帖子识别和点击系统:

复制代码
@action_exector
def detail_action(page: CorePageObject):
    pass
    _article_locators = page.page.locator('article a[slot="title"]')
    _selected_article = None
    for _article_locator in _article_locators.all():
        if element_in_viewport(page.page, _article_locator) and _article_locator.is_enabled():
            _selected_article = _article_locator
            break

    if not _selected_article:
        page.logger.info("not found article in viewport")
        return

    page.logger.info(f"click article position: {_selected_article.bounding_box()}")
    _article_title_locator = _selected_article
    if _article_title_locator.count() > 0:
        page.logger.info(f"click article title {_article_title_locator.first.text_content()}")
        simulate_mouse_click(page.page, _article_title_locator.first)

3.2 返回导航动作

返回动作确保用户能够从详情页回到主页面继续浏览:

复制代码
@action_exector
def back_action(page: CorePageObject):
    """
    页面返回导航动作
    
    从帖子详情页返回到主页面,并等待页面加载完成
    """
    page.logger.info("执行页面返回操作")
    
    # 执行浏览器返回
    page.page.go_back()
    
    # 等待页面稳定
    page.logger.info("等待页面加载完成...")
    page.page.wait_for_timeout(5000)  # 固定等待5秒
    page.page.wait_for_load_state()   # 等待页面加载状态
    
    page.logger.info("页面返回完成")

4. X关键词搜索页面控制器

4.1 XSearchBrowsePage核心类

X关键词搜索页面类是整个系统的核心控制器,管理页面状态、动作权重和异常处理:

复制代码
class XSearchBrowsePage(CoreBrowsePage):
    """X关键词搜索自动化浏览页面控制器"""

    @property
    def url(self):
        """
        X搜索页URL生成器
        
        根据配置的搜索关键词动态生成搜索结果页URL
        """
        return f"https://www.x.com}"
    
    @property
    def search_text(self):
        """
        搜索关键词获取器
        
        从代理变量中获取搜索关键词配置
        支持动态配置不同的搜索关键词
        
        Returns:
            str: 搜索关键词文本
        """
        return self.proxy.use("${search_text}", VariableValue).value()

    @property
    def random_actions(self):
        """
        状态化随机动作配置系统
        
        根据当前页面状态返回对应的动作权重配置
        每个动作都有对应的权重值,系统会根据权重随机选择执行
        """
        return {
            # 搜索结果页状态动作配置
            "search": [
                # (权重, 动作函数)
                (self.scroll_weight, partial(
                    scroll_action, 
                    distance=self.scroll_distance, 
                    duration=self.scroll_time, 
                    scroll_down_probability=self.scroll_down_probability
                )),
                (self.stay_weight, partial(
                    stay_action, 
                    stay_time=self.search_stay_time
                )),
                (self.view_detail_weight, partial(detail_action)),
            ],
            
            # 详情页状态动作配置
            "detail": [
                # 详情页不执行滚动,主要是停留和返回
                (self.stay_weight, partial(
                    stay_action, 
                    stay_time=self.detail_stay_time
                )),
                (self.go_back_weight, partial(back_action)),
            ],
        }

4.1 登录状态检测

复制代码
    def is_login(self):
        """
        检查是否登录
        """
        try:
            self.page.wait_for_load_state()
            self.page.locator('a[href="/compose/post"]').wait_for(timeout=300000, state="visible")
        except Exception as e:
            self.logger.error(e)
            return False
        return True

4.2 页面状态识别

复制代码
    def get_current_state(self):
        """
        智能页面状态识别系统
        
        根据当前页面URL自动识别页面状态,用于动作选择
        
        Returns:
            str: 页面状态 ("home", "detail", "unknown")
        """
        _current_page_url = self.page.url
        self.logger.info(f"当前页面URL分析: {_current_page_url}")
        
        # X主页状态
        if _current_page_url.strip('/') == "https://www.x.com":
            self.logger.info("识别为主页状态 (home)")
            return "home"

        # 详情页状态检测
        if any(keyword in _current_page_url for keyword in _DETAIL_URL_KEYWORDS):
            self.logger.info(f"识别为详情页状态 (detail)")
            return "detail"
        
        # 未知状态
        self.logger.warning(f"未知页面状态: {_current_page_url}")
        return "unknown"

5. 系统启动与配置

5.1主流程启动配置

系统启动使用框架提供的start_main_page_process函数,支持重试机制和超时控制:

复制代码
# 系统主流程启动
start_main_page_process(
    self,                # 页面实例
    XSearchBrowsePage,       # X页面控制器类
    retry=1,            # 失败重试次数
    timeout=60000       # 超时时间(毫秒)
)

5.2 配置参数说明

X自动化系统的行为通过以下权重参数进行调控:

复制代码
# 动作权重配置示例
class XBrowsePage(CoreBrowsePage):
    def __init__(self):
        super().__init__()
        
        # 滚动相关配置
        self.scroll_weight = 40          # 滚动动作权重
        self.scroll_distance = (200, 600) # 滚动距离范围(像素)
        self.scroll_time = (0.5, 2.0)    # 滚动持续时间(秒)
        self.scroll_down_probability = 80 # 向下滚动概率(%)
        
        # 停留相关配置
        self.stay_weight = 30            # 停留动作权重
        self.home_stay_time = (3, 8)     # 主页停留时间范围(秒)
        
        # 交互相关配置
        self.view_detail_weight = 20     # 查看详情权重
        self.go_back_weight = 80         # 返回操作权重

6.额外说明

6.1框架依赖说明

本系统基于成熟的RPA框架构建,主要依赖组件包括:

复制代码
# 核心依赖模块
from stubs.rpa import (
    CoreBrowsePage,      # 浏览器页面基类
    CorePageObject,      # 页面对象基类
    action_exector,      # 动作执行器装饰器
    smooth_scroll,       # 平滑滚动函数
    element_in_viewport, # 视口检测函数
    simulate_mouse_click, # 鼠标点击模拟
    start_main_page_process # 主流程启动器
)

6.2最佳实践建议

  1. 权重调优:根据实际需求调整各动作的权重比例
  2. 时间控制:合理设置停留时间和滚动持续时间
  3. 异常处理 :完善check_exception_handler方法的异常检测逻辑
  4. 日志记录:充分利用页面对象的logger进行调试和监控
  5. 状态管理:根据业务需求扩展更多的页面状态

结语

本文详细介绍了基于RPA框架的X自动化浏览系统实现方案。通过动作执行器模式、状态机管理和权重化随机动作系统,我们构建了一个功能完整、行为自然的自动化解决方案。

核心技术特点

  • 基于装饰器的动作执行器模式,代码结构清晰
  • 状态机管理不同页面的行为策略
  • 权重化随机动作系统,模拟真实用户行为
  • 智能内容识别和交互机制
  • 完善的异常检测和处理框架

系统优势

  • 高度模块化的设计,易于扩展和维护
  • 基于成熟RPA框架,稳定性有保障
  • 智能的页面状态识别和动作选择
  • 丰富的配置参数,适应不同使用场景

通过本文的学习,您已经掌握了Facebook自动化系统的核心开发技术。在下一篇文章《基于Chrome140的X账号自动化(关键词浏览)------运行脚本(三)》中,我们将重点介绍系统的部署运行、监控管理和性能优化,帮助您将开发完成的自动化脚本投入实际应用。

相关推荐
TH_16 小时前
35、AI自动化技术与职业变革探讨
运维·人工智能·自动化
代码方舟8 小时前
Java企业级实战:对接天远名下车辆数量查询API构建自动化风控中台
java·大数据·开发语言·自动化
我送炭你添花13 小时前
Pelco KBD300A 模拟器:07+2.Python 专题:线程安全与信号槽机制——项目多线程最佳实践
python·自动化·运维开发
富唯智能14 小时前
重新定义“自动化搬运项目”:15分钟部署的复合机器人如何革新柔性生产
人工智能·机器人·自动化
Benny的老巢14 小时前
基于Playwright TypeScript/JavaScript的API调用爬虫成熟方案
javascript·爬虫·typescript·自动化·agent·playwright
北京耐用通信14 小时前
耐达讯自动化CAN转PROFIBUS网关让软启动器如何让包装线告别“信号迷宫”
人工智能·物联网·网络协议·自动化·信息与通信
霍格沃兹软件测试开发16 小时前
Playwright API 测试:网络请求拦截与模拟的方法
自动化·playwright
HBYKKJ16 小时前
格雷希尔:G15F-KFYK-FD39 定制款快速密封连接器,适配自动化产线,赋能电驱动通讯接口的自动化密封测试
自动化·集成测试·气密性测试·新能源汽车·格雷希尔·快速密封连接器·电驱动测试
阿蔹17 小时前
泰和昌商城接口自动化项目框架介绍
运维·自动化
b***251118 小时前
圆柱锂电池双面点焊机:新能源制造的核心工艺装备
人工智能·自动化