笔记:完善python selenium 讯飞写作的整体自动化

本文记录了使用Python Selenium自动化讯飞写作的过程,包括自动登录、内容定位与点击、对话框交互等步骤,最终实现完整的自动化工作流程。通过改进定位策略,解决了元素定位和点击的问题。
摘要由CSDN通过智能技术生成

昨天做得不太好,今天再来一次,我发现,只要写得多,一定会有发现。

1、加入本地目录,不要一直登录。

# 定义Edge浏览器的用户数据目录
    edge_user_data_dir = r"C:\Users\Administrator\AppData\Local\Microsoft\Edge\User Data\Default"

    # 设置Edge选项
    edge_options = Options()
    edge_options.use_chromium = True
    # 向Edge浏览器传递启动参数
    edge_options.add_argument(f"--user-data-dir={edge_user_data_dir}")

2.如果有登录按钮才登录,否则就不登录了。

参考代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Edge浏览器
edge_options = Options()
edge_options.add_argument('--headless')  # 可选:如果需要在无头模式下运行
edge_options.add_argument('--disable-gpu')  # 可选:在无头模式下防止GPU错误
driver = webdriver.Edge(options=edge_options)

# 设置超时时间,例如10秒
timeout = 10

# 导航到目标URL
driver.get('https://huixie.iflyrec.com/list')

# 定位元素,使用类名查找
try:
    login_register_button = WebDriverWait(driver, timeout).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'btn-login-register'))
    )
    print("元素找到,执行下一步操作...")
    
    # 如果你想点击这个元素,可以添加以下代码
    login_register_button.click()
except TimeoutException:
    print("元素未找到,超时了!")

# 清理资源
driver.quit()

3、换一种思路,如何有工作台了,则提示已经登录,否则,则登录过程。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Edge浏览器
edge_options = Options()
edge_options.add_argument('--headless')  # 可选:如果需要在无头模式下运行
edge_options.add_argument('--disable-gpu')  # 可选:在无头模式下防止GPU错误
driver = webdriver.Edge(options=edge_options)

# 设置超时时间,例如10秒
timeout = 10

# 导航到目标URL
driver.get('https://huixie.iflyrec.com/list')

# 定位元素,使用类名和包含的文本
try:
    dashboard_element = WebDriverWait(driver, timeout).until(
        EC.presence_of_element_located((By.XPATH, '//div[@class="item-wrap-name" and contains(text(), "工作台")]'))
    )
    print("元素找到,已登录!")
except TimeoutException:
    print("元素未找到,可能未登录!")

# 清理资源
driver.quit()

4.至此,完成进入界面,无论新建或原来的文档,根据实际

5.切换到最后一个窗口,即准备自动化工作的窗口。

def  switch_to_last_window(driver):
    try:
        # 获取所有窗口句柄
        window_handles = driver.window_handles

        # 遍历窗口句柄,定位到最后一个打开的标签页
        for handle in window_handles:
            driver.switch_to.window(handle)  # 切换到当前循环的窗口

        # 此时已经位于最后一个标签页,可以执行相应操作
        print("当前页面的URL是:", driver.current_url)
        return True

    except Exception as e:
        print(f"移动到最后一页,发生错误:{e}")

6。判断是否有返回主页的按钮,用以最后的返回。

def is_back_icon(driver):
    # 等待页面加载完成
    WebDriverWait(driver, 30).until(js_condition)
    # 等待反馈元素变得可交互
    back_icon_element = WebDriverWait(driver, 30).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '.svg-icon.pointer.icon-back-icon'))
        # 或者使用By.CLASS_NAME
    )
    if back_icon_element:
        print("出现了返回主页按键,可以工作了")
        return True,back_icon_element

7.初步测试,很成功

def autocomplete_tasks1():
    if switch_to_last_window(driver):
        is_back_icon(driver)

8.我先把所有的问题都改成h1了,很方便浏览。原来直接使用p样式,简直是坑人。

 9.取出h1样式的内容及下一级内容,返回相关参数,用以下一步操作。

我试着先取出所有的h1级的问题及是否回答过的内容。该问题如果回答过,会有一个当时提出问题的内容。如

 这是取出的代码:

def get_level1_and_level3_info(driver):
    # 定义等待元素出现的超时时间
    timeout = 10

    # 定位 my-menus 下的所有 level1 节点
    level1_nodes = WebDriverWait(driver, timeout).until(
        EC.presence_of_all_elements_located((By.XPATH, '//div[@class="my-menus"]//div[@class="el-tree-node is-expanded is-focusable level1"]'))
    )

    # 提取 level1 和 level3 的信息
    results = []
    for level1_node in level1_nodes:
        level1_text = level1_node.find_element(By.XPATH, './/div[@class="el-tree-node__content"]').text
        level1_data_key = level1_node.get_attribute('data-key')

        # 查找 level1 节点下的 level3 节点
        try:
            level3_text = level1_node.find_element(By.XPATH, './/div[@class="el-tree-node__children"]').text
            # level3_data_key = level3_node.get_attribute('data-key')
        except NoSuchElementException:
            level3_text = None
            # level3_data_key = None

        results.append({
            "node":level1_node,
            "level1_text": level1_text,
            "data_key": level1_data_key,
            "level3_text": level3_text,
            # "level3_data_key": level3_data_key
        })

    return results

10.能点击

def 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PyAIGCMaster

1毛钱也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值