Selenium记录RPA初阶 - 基本输入元件

news2025/4/21 14:49:24

防止自己遗忘,故作此为记录。

爬取网页基本元件并修改后爬取。

包含元件:

elements: dict[str, str] = {
    "username": None,
    "password": None,
    "email": None,
    "website": None,
    "date": None,
    "time": None,
    "number": None,
    "range": None,
    "color": None,
    "search": None
}


步骤:

(1)爬取网页原有信息:

很简单,因为都是<input>元件,只不过type不同,但大差不差。

WebDriverWait(driver, 10).until(expected_conditions.visibility_of_element_located((By.ID, "username")))
for index, element in enumerate(elements):
    elements[element] = driver.find_element(By.ID, element).get_attribute("value")

with open("RPA_read.txt", 'w', encoding="utf-8") as file:
    file.write(pformat(elements))


 (2)修改元件内容:

也简单,input元件直接send_keys即可。

write_elements: dict[str, str] = {
    "username": "DaisyMo",
    "password": "MyLoveDaisyMo",
    "email": "DaisyMo@email.love",
    "website": "DaisyWithMe.love",
    "date": "8-10",
    "time": str(time()),
    "number": "6",
    "range": "66",
    "color": "#FF8C2F",
    "search": "墨小菊"
}
for index, (element, value) in enumerate(write_elements.items()):
    #更正:需要删除之前的
    driver.find_element(By.ID, element).clear()
    driver.find_element(By.ID, element).send_keys(value)

(3)爬取修改的内容:

大差不差和上面,就是最好判断一下现在的内容和之前的是否相同。

(
    WebDriverWait(driver, 10)
    .until(lambda driver: driver.find_element(By.ID, "username")
    .get_attribute("username") != elements["username"])
)

for index, element in enumerate(elements):
    elements[element] = driver.find_element(By.ID, element).get_attribute("value")

with open("RPA_write.txt", 'w', encoding="utf-8") as file:
    file.write(pformat(elements))
#结果就是
{'color': '#000000',
 'date': '2021-06-20',
 'email': 'spiderbuf@126.com',
 'number': '',
 'password': 'spiderbuf',
 'range': '50',
 'search': '',
 'time': '00:01:01',
 'username': 'Spiderbuf',
 'website': 'http://www.spiderbuf.cn'}

#之后
{'color': '#ff8c2f',
 'date': '',
 'email': 'DaisyMo@email.love',
 'number': '6',
 'password': 'MyLoveDaisyMo',
 'range': '50',
 'search': '墨小菊',
 'time': '17:59',
 'username': 'DaisyMo',
 'website': 'DaisyWithMe.love'}


源代码:

# -*- coding: utf-8 -*-
# -*- file: RPA.py  -*-

from time import time
from pprint import pformat
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait


target_url: str = r"https://www.spiderbuf.cn/playground/n06"

service: object = ChromeService(r"RPA\chromedriver-win64\chromedriver.exe")
options: object = ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_argument("--disable-blink-features=AutomationControlled")

driver: object = Chrome(service=service, options=options)

driver.get(target_url)

elements: dict[str, str] = {
    "username": None,
    "password": None,
    "email": None,
    "website": None,
    "date": None,
    "time": None,
    "number": None,
    "range": None,
    "color": None,
    "search": None
}

write_elements: dict[str, str] = {
    "username": "DaisyMo",
    "password": "MyLoveDaisyMo",
    "email": "DaisyMo@email.love",
    "website": "DaisyWithMe.love",
    "date": "8-10",
    "time": str(time()),
    "number": "6",
    "range": "66",
    "color": "#FF8C2F",
    "search": "墨小菊"
}

WebDriverWait(driver, 10).until(expected_conditions.visibility_of_element_located((By.ID, "username")))
for index, element in enumerate(elements):
    elements[element] = driver.find_element(By.ID, element).get_attribute("value")

with open("RPA_read.txt", 'w', encoding="utf-8") as file:
    file.write(pformat(elements))

for index, (element, value) in enumerate(write_elements.items()):
    driver.find_element(By.ID, element).send_keys(value)

WebDriverWait(driver, 10).until(lambda driver: driver.find_element(By.ID, "username").get_attribute("username") != elements["username"])

for index, element in enumerate(elements):
    elements[element] = driver.find_element(By.ID, element).get_attribute("value")

with open("RPA_write.txt", 'w', encoding="utf-8") as file:
    file.write(pformat(elements))

driver.close()


还有特殊的元件需要学习。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第三个Qt开发实例:利用之前已经开发好的LED驱动在Qt生成的界面中控制LED2的亮和灭

前言 上一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145459006 中&#xff0c;我们是直接利用GPIO子系统控制了LED2的亮和灭&#xff0c;这篇博文中我们利用之前写好的LED驱动程序在Qt的生成的界面中控制LED2的亮和灭。 之前已经在下面两篇博文中实现了LED驱动…

Android studio 创建aar包给Unity使用

1、aar 是什么&#xff1f; 和 Jar有什么区别 aar 和 jar包 都是压缩包&#xff0c;可以使用压缩软件打开 jar包 用于封装 Java 类及其相关资源 aar 文件是专门为 Android 平台设计的 &#xff0c;可以包含Android的专有内容&#xff0c;比如AndroidManifest.xml 文件 &#…

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…

把DeepSeek接入Word软件,给工作提质增效!

前几天给大家分享了 DeepSeek 的资源包&#xff0c;可能很多人并没有本地部署 DeepSeek 的需求&#xff0c;只想使用它来提高一下工作效率。那今天来分享一下怎么直接在 Word 软件调用 DeepSeek&#xff0c;避免在 Word 软件和网页版 DeepSeek 里来回切换。 ## 前置条件 1、有…

Linux进阶——web服务器

一、相关名词解释及概念&#xff1a; www&#xff1a;(world wide web)全球信息广播&#xff0c;通常来说的上网就是使用www来查询用户所需的信息。使用http超文本传输协议。 过程&#xff1a;web浏览器向web服务&#xff08;Apache&#xff0c;Microsoft&#xff0c;nginx&…

QT笔记——多语言翻译

文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能&#xff0c;实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…

oracle 基础语法复习记录

Oracle SQL基础 因工作需要sql能力&#xff0c;需要重新把sql这块知识重新盘活&#xff0c;特此记录学习过程。 希望有新的发现。加油&#xff01;20250205 学习范围 学习SQL基础语法 掌握SELECT、INSERT、UPDATE、DELETE等基本操作。 熟悉WHERE、GROUP BY、ORDER BY、HAVIN…

网络工程师 (22)网络协议

前言 网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合&#xff0c;它规定了通信时信息必须采用的格式和这些格式的意义。 一、基本要素 语法&#xff1a;规定信息格式&#xff0c;包括数据及控制信息的格式、编码及信号电平等。这是协议的基础&#xff0c;确…

【银河麒麟高级服务器操作系统】系统日志Call trace现象分析及处理全流程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://document.kylinos.cn 服务器环境以及配置 系统环境 物理机/虚拟机/云…

Milvus 存储设计揭秘:从数据写入到 Segment 管理的全链路解析

作为一款云原生向量数据库&#xff0c;Milvus 的高效查询性能有赖于其独特的存储架构设计。然而&#xff0c;在实际使用过程中&#xff0c;许多社区用户常常会遇到以下问题&#xff1a; 为什么频繁调用 flush 后&#xff0c;查询速度会变慢&#xff1f; 数据删除后&#xff0c;…

Redis双写一致性(数据库与redis数据一致性)

一 什么是双写一致性&#xff1f; 当修改了数据库&#xff08;MySQL&#xff09;中的数据&#xff0c;也要同时更新缓存&#xff08;redis&#xff09;中的数据&#xff0c;缓存中的数据要和数据库中的数据保持一致 双写一致性&#xff0c;根据业务对时间上的要求&#xff0c;…

14.PPT:中国注册税务师协会宣传【26】

目录 NO12 NO3/4/5​ NO678​ 【文本框水平/垂直居中】【文本框内容水平/垂直居中】 NO12 坑&#xff1a;注意❗Word文档的PPt素材.docx的标题大纲是混乱的&#xff0c;虽然他设置了&#xff0c;所以我们需要重新设置 设计→主题视图→幻灯片母版→删除版式插入logo NO3/4…

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章&#xff1a; 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境&#xff0c;均为 windows 环境&#xff0c;mac 环境其实也类似 ~ ① 编译proto文件&#xff0c;相关插件 简单介绍&#xff1a; protoc 是编译器&#xff0c;用于将…

autMan奥特曼机器人-对接deepseek教程

一、安装插件ChatGPT 符合openai api协议的大模型均可使用此插件&#xff0c;包括chatgpt-4/chatgpt-3.5-turbo&#xff0c;可自定义服务地址和模型&#xff0c;指令&#xff1a;gpt&#xff0c;要求Python3.7以上&#xff0c;使用官方库https://github.com/openai/openai-pyt…

数据分析:企业数字化转型的金钥匙

引言&#xff1a;数字化浪潮下的数据金矿 在数字化浪潮席卷全球的背景下&#xff0c;有研究表明&#xff0c;只有不到30%的企业能够充分利用手中掌握的数据&#xff0c;这是否让人深思&#xff1f;数据已然成为企业最为宝贵的资产之一。然而&#xff0c;企业是否真正准备好从数…

Spring Web MVC项目的创建及使用

一、什么是Spring Web MVC&#xff1f; Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中&#xff0c;通常被称为Spring MVC。 1.1 MVC的定义 MVC 是 Model View Controller 的缩写&#xff0c;它是软件工程中的一种软件架构…

MySQL的底层原理与架构

前言 了解MySQL的架构和原理对于很多的后续很多的操作会有很大的帮助与理解。并且很多知识都与底层架构相关联。 了解MySQL架构 通过上面的架构图可以得知&#xff0c;Server层中主要由 连接器、查询缓存、解析器/分析器、优化器、执行器 几部分组成的&#xff0c;下面将主要…

Node.js 实现简单爬虫

介绍 爬虫是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。 本文将使用 Nodejs 编写一个简单的爬虫脚本&#xff0c;爬取一个美食网站&#xff0c;获取菜品的标题和图片链接&#xff0c;并以表格的形式输出。 准备工作 1、初始化项目 首先&#xff0…

2024.1版android studio创建Java语言项目+上传gitee

1.在gitee上创建仓库 Gitee 创建仓库并邀请成员指南_gitee创建仓库邀请成员-CSDN博客 见1 2.新建android studio项目 3.在Android studio配置gitee Android Studio提交代码到gitee仓库_android log in to gitee-CSDN博客 其中的一二步 p.s.添加gitee账户选择password时&a…

opentelemetry-collector 配置elasticsearch

一、修改otelcol-config.yaml receivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318 exporters:debug:verbosity: detailedotlp/jaeger: # Jaeger supports OTLP directlyendpoint: 192.168.31.161:4317tls:insecure: trueotlphttp/prometheus: …