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

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

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 autoco

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623067.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解锁AI写作新纪元的文心一言指令

解锁AI写作新纪元的文心一言指令 在人工智能(AI)飞速发展的今天,自然语言处理(NLP)技术取得了显著的进步。文心一言,作为NLP领域的一颗璀璨明星,以其强大的文本生成和指令理解能力,为…

广东省网络安全竞赛部分web,misc wp

我的队伍只做了5题,还是太菜了,本来不想发的,但是写都写了,还是水一篇博客吧 这里是我们队的wp misc1 给了一个压缩包,解压需要密码,用纯数字密码没跑出来,感觉可能不是要强跑,看…

UIKit常用API:Transform

需求 使用Transform系列的API,该API中提供了旋转、平移等功能。其中函数中带make的效果是只变化一次,不带make可变化多次。此外,还有恢复函数:CGAffineTransformIdentity。 代码实现 注意按钮绑定的是同一个响应事件&#xff0…

详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西

Cookie Cookie是一种小型的文本文件,由网站在用户访问时存储在其计算机或移动设备上,Cookie主要用于跟踪、识别和存储有关用户的信息。 简单来说Cookie就是用来存储某些后端发送给前端的数据,例如我们登陆后,后端会返回一个登录…

PythonStudio 控件使用常用方式(十一)MessageBox

PythonStudio是一个极强的开发Python的IDE工具,它使用的是Delphi的控件,常用的内容是与Delphi一致的。但是相关文档并一定完整。现在我试试能否逐步把它的控件常用用法写一点点,也作为PythonStudio的参考。 MessageBox是一个消息对话框&…

AI图书推荐:ChatGPT等生成式AI在高等教育中的应用

自2022年11月以来,ChatGPT及其在高等教育各个层面的影响已成为所有教育对话的核心内容。Chan和Colloton所著的书籍是首批全面探讨ChatGPT与生成式人工智能(GenAI)在高等教育中应用及影响的作品之一。 该书深入研究了针对专业环境定制的AI素养…

CHATGLM3应用指南(三)——模型微调

CHATGLM3的本地部署可以见博客:CHATGLM3应用指南(一)——本地部署_chatglm3需要多大内存-CSDN博客 一、微调数据集制作 数据集的形式如下图所示: 可使用下面代码对数据集格式调整 #! /usr/bin/env python print(!!!!!) import …

AI办公自动化-用kimi自动清理删除重复文件

在kimichat中输入提示词: 你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下: 1、打开文件夹D:\downloads; 2、哈希值比较比较里面所有的文件,如果文件相同,那么移动多余…

秒杀系统之设计方向

1 秒杀存在的问题 对于一个日常平稳的业务系统,如果直接开通秒杀功能的话,往往会出现很多问题—— 2 设计方向的思考 秒杀本质是要求一个瞬时高发下的承压系统,这也是其区别于其他业务的核心场景。对日常系统秒杀产生的问题逐一进行拆解分…

MPLAB X IDE编译attiny1616工程报错却无报错信息

MPLAB X IDE(XC-8编译器)编译报错,无具体错误内容,仅显示需要xc-8 pro的警告。 内存占用率显示为81%,未超标。 原因:软件使用了microchip的bootloader功能。应用程序起始地址(也是bootloader结束地址)设置错…

【SAP ABAP学习资料】通过RFC接口上传图片至SAP 图片格式转换 图片大小调整

SAP图片相关: 链接: 【SAP ABAP学习资料】图片上传SAP 链接: 【SAP ABAP学习资料】屏幕图片预览 链接: 【SAP ABAP学习资料】smartforms打印图片,动态打印图片 需求: SAP上传图片只能本地电脑选择图片通过SE78或PERFORM IMPORT_BITMAP_BDS上…

【专利】一种日志快速分析方法、设备、存储介质

公开号CN116560938A申请号CN202310311478.5申请日2023.03.28 是我在超音速人工智能科技股份有限公司(833753) 职务作品,第一发明人是董事长夫妇,第二发明人是我。 ** 注意** : 内容比较多,还有流程图、界面等。请到 专利指定页面…

SSL/TLS协议信息泄露漏洞(CVE-2016-2183)解法

1.运行gpedit.msc,进入本地组策略编辑器。 2. 本地组策略编辑器-->计算机配置-->管理模板-->网络-->SSL配置设置-->启用“SSL密码套件顺序”。 3. 将原有的密码套件值清空,拷入下面的值,保存设置,并重启服务器即…

AI时代的网络安全战:以智取胜,守护数字安宁

在数字化浪潮的推动下,我们的生活和工作日益离不开互联网。然而,随着人工智能(AI)技术的飞速发展,网络安全问题也日益凸显。美国联邦调查局(FBI)的一则警报如同一记重锤,敲响了我们对…

CANopen NWT,SDO,HeartBeat报文协议

什么是CANopen? CANopen是一个基于CAN总线的“高层协议”,这意味着CAN总线(ISO 11898)就像集装箱的卡车一般作为CANopen信息的“运输工具”。 CAN只是实现了带有11位CAN ID、远程传输(RTR)位和64个数据位&…

【VUE.js】前端框架——未完成

基于脚手架创建前端工程 环境 当安装node.js时,它本身就携带有npm命令。(-v 查版本号)安装VUE CLI npm i vue/cli -g(全局) 创建 vue create 【project name】 镜像源解决方案 输入创建命令后,提示检查更…

论文阅读记录--关于水文系统的传递函数

文章目录 J-schuite的文章,地下水系统的响应的功率谱分析--传递函数1. 什么是冲激响应函数与传递函数?2. 地下水流系统中传递函数的求解3. J-schuite文章中传递函数的复现J-schuite的文章,地下水系统的响应的功率谱分析–传递函数 1. 什么是冲激响应函数与传递函数? 在信号…

PingCAP 戴涛:构建面向未来的金融核心系统

作者:戴涛 导读 近日,平凯星辰解决方案技术部总经理戴涛在 2024 数据技术嘉年华活动中,做了主题为“构建面向未来的金融核心系统”的分享,本文为戴涛演讲实录的全文。 文章分析了中国金融行业的发展趋势,并且基于这…

集合系列(二十五) -二叉树、平衡二叉树、红黑树性能总结

一、摘要 二叉树,作为一种数据结构,在实际开发中,有着非常广泛的应用,尤其是以平衡二叉树、红黑树为代表,在前几篇文章中,我们详细的介绍了BST、AVL、RBT的算法以及代码实践,下面简要概括描述一…

nginx目录枚举修复手册

nginx目录枚举修复手册 漏洞背景 修复方式: ssh zujian2 sudo vi /data/apps/nginx/conf/conf.d/default.conf server {