python web自动话(⽂件上传和⽇期控件)

1.⽂件上传操作-input标签⽂件选择

                

我们有如下的文件上传的联系网站,我们可以定位到选择文件,但是点击选择文件无法定位到

        我们可以看到这个选择文件的标签是input

我们直接使用send_keys进行图片上传

        

""""""
import time

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get(r"E:\Python\pythonProjects\Webtest0524\day7\01 文件上传操作\文件上传.html")

# 定位文件上传的按钮元素
el = driver.find_element(By.ID, "fileToUpload")
time.sleep(3)

# 上传文件
el.send_keys(r"E:\Python\pythonProjects\Webtest0524\day7\01 文件上传操作\上传文件.jpeg")

time.sleep(3)

我们来个实战演练

        

""""""
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait

"""
    1.打开项目
    2.完成登录
    3.跳转到'作家专区'
    4.点击'发布作品'
    5.完成表单的填写(包含文件上传),并点击提交
    6.手动去验证是否发布作品成功
"""

# 前置准备
driver = webdriver.Chrome()
username = "18166595233"
password = "123456"
wait = WebDriverWait(driver,5)


# 1.打开项目
driver.get("http://120.25.127.201:18001/user/login.html")
locator=(By.XPATH,"//h3")
wait.until(ec.text_to_be_present_in_element(locator,"登陆读书屋"))

# 2.完成登录
driver.find_element(By.ID,"txtUName").send_keys(username)
driver.find_element(By.ID,"txtPassword").send_keys(password)
driver.find_element(By.ID,"btnLogin").click()
# 3.跳转到'作家专区'
driver.find_element(By.CSS_SELECTOR,"#navModule > li:nth-child(5) > a").click()

# 4.点击'发布作品'
# 切换窗口
all_handel=driver.window_handles
driver.switch_to.window(all_handel[-1])

# 点击'发布小说'

driver.find_element(By.LINK_TEXT,"发布小说").click()
# 5.完成表单的填写(包含文件上传),并点击提交
select_element=driver.find_element(By.ID,"catId")
select_object=Select(select_element)
select_object.select_by_value("2")

driver.find_element(By.ID,"bookName").send_keys("明日方舟启动")


# 上传文件
file0=driver.find_element(By.ID,"file0")
file0.send_keys("E:\Python\资料\hutao.png")

# 小说介绍:
driver.find_element(By.ID,"bookDesc").send_keys("这时一本关于主人公和阿米娅的泰拉大陆冒险之旅")
time.sleep(5)
# 提交
driver.find_element(By.ID,"btnRegister").click()

2.⽂件上传操作-⾮input标签⽂件选择

        ⾮input标签的⽂件上传, selenium是⽆法处理的,使⽤PyAutoGui进⾏处理
        

安装PyAutoGui:


pip install pyautogui

然后我们选择图片在要获取鼠标的坐标,把鼠标移动到文件的位置
 

                

""""""

import time

import pyautogui  # pip install pyautogui -i https://mirrors.aliyun.com/pypi/simple/
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get(r"E:\Python\pythonProjects\Webtest0524\day7\01 文件上传操作\非input文件上传.html")

# 定位文件上传的按钮元素
el = driver.find_element(By.CLASS_NAME, "custom-upload-button")

# 点击上传文件的按钮
# el.click()

# 如果使用click报错,就用ActionChains操作
ActionChains(driver).click(el).perform()

# 获取鼠标的坐标(把鼠标移动到文件的位置)
x, y = pyautogui.position()
print(f"鼠标的当前坐标 -- x: {x}, y: {y}")

# 点击"文稿"
pyautogui.moveTo(1794, 451)
time.sleep(2)
pyautogui.click()

# 点击'图片'
pyautogui.moveTo(2462, 381)
time.sleep(2)
pyautogui.click()

pyautogui.moveTo(2479, 680)
pyautogui.click()

# 选择上传的文件
pyautogui.moveTo(2204, 509)
pyautogui.click()

# 点击"打开"
pyautogui.moveTo(2479, 680)
pyautogui.click()

"""
如果是windows系统,要比mac系统简单的多
"""

# 获取鼠标的坐标(把鼠标移动到文件的位置)
x, y = pyautogui.position()
print(f"鼠标的当前坐标 -- x: {x}, y: {y}")

# 移动到地址输入栏
pyautogui.moveTo(x, y)
pyautogui.click()

# 删除掉原来的路径
pyautogui.press("backspace")

# 输入新的文件地址路径
pyautogui.write("新的文件地址路径")

# 连续按下两次回车键
pyautogui.press("enter")
pyautogui.press("enter")

        


3.多文件上传

                

这种我们发现

input是嵌套在lable中 无法直接选中,我们还是要通过控制鼠标控制点击

代码如下

​
""""""
import time

import pyautogui
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get(r"E:\Python\pythonProjects\Webtest0524\day7\01 文件上传操作\多文件上传.html")

# 定位文件上传的按钮元素
el = driver.find_element(By.CLASS_NAME, "custom-upload-button")

# 点击上传文件的按钮
# el.click()

# 如果使用click报错,就用ActionChains操作
ActionChains(driver).click(el).perform()

# 获取鼠标的坐标(把鼠标移动到文件的位置)
x, y = pyautogui.position()
print(f"鼠标的当前坐标 -- x: {x}, y: {y}")

# 点击"文稿"
pyautogui.moveTo(284,54)
time.sleep(2)
pyautogui.click()
pyautogui.press( "backspace")
pyautogui.write("E:\Python")
pyautogui.press("enter")
pyautogui.press("enter")
#
# 按下ctrl键不动
pyautogui.keyDown("ctrl")

pyautogui.moveTo(323, 358)
time.sleep(2)
pyautogui.click()

pyautogui.moveTo(307, 379)
time.sleep(2)
pyautogui.click()

# # 松开ctrl键
pyautogui.keyUp("command")

# # 点击"打开"
pyautogui.moveTo(642, 451)
pyautogui.click()



​

执行如下

        

        

4.对⽇期控件的处理

                我们在自动化中会遇到时间控件,我们怎么处理呢

                

               1.input标签时期控件

                

                

""""""

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get(r"E:\Python\pythonProjects\Webtest0524\day7\02 对日期控件的处理\layui仿写页面\日期控件.html")

# input标签:直接输入时间
driver.find_element(By.ID, "test1").send_keys("2024-5-5")

2.非input时期控件

        

我们看到这个日期控件不属于input标签

        

""""""

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get(r"E:\Python\pythonProjects\Webtest0524\day7\02 对日期控件的处理\layui仿写页面\日期控件.html")

# 选择类型的日期控件:
# 先滑动到底部的日期控件
el = driver.find_element(By.ID, "layui-laydate35")
ActionChains(driver).scroll_to_element(el).perform()

# 对非input输入框进行点击,触发日期框架弹窗
driver.find_element(By.ID, "test28").click()

# 选择年份
driver.find_element(By.XPATH, '//div[@id="layui-laydate31"]/div[1]/div[1]/div/span[1]').click()  # 点击年份选择
driver.find_element(By.XPATH, '//*[@id="layui-laydate31"]/div[1]/div[2]/ul/li[15]').click()  # 2030年

# 选择月份
driver.find_element(By.XPATH, '//*[@id="layui-laydate31"]/div[1]/div[1]/div/span[2]').click()  # 点击月份选择
driver.find_element(By.XPATH, '//*[@id="layui-laydate31"]/div[1]/div[2]/ul/li[1]').click()  # 一月

# 选择日期
driver.find_element(By.XPATH, '//*[@id="layui-laydate31"]/div[1]/div[2]/table/tbody/tr[5]/td[5]').click()  # 31号

# 2030年1月31号

3.对滑动的时间控件操作

        

""""""

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.wheel_input import ScrollOrigin
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get(r"E:\Python\pythonProjects\Webtest0524\day7\02 对日期控件的处理\layui仿写页面\日期控件.html")

# 点击时间选择器,触发滑动选择器
driver.find_element(By.ID, "test4").click()

"""
方式一:直接滚动到元素
"""

# 选择'时'
# hours = driver.find_element(By.XPATH, '//*[@id="layui-laydate5"]/div[1]/div[2]/ul/li[1]/ol/li[23]')
# ActionChains(driver).scroll_to_element(hours).perform()
# hours.click()

# 选择'分'
# minutes = driver.find_element(By.XPATH, '//*[@id="layui-laydate5"]/div[1]/div[2]/ul/li[2]/ol/li[34]')
# ActionChains(driver).scroll_to_element(minutes).perform()
# minutes.click()

# 选择'秒'
# seconds = driver.find_element(By.XPATH, '//*[@id="layui-laydate5"]/div[1]/div[2]/ul/li[3]/ol/li[20]')
# ActionChains(driver).scroll_to_element(seconds).perform()
# seconds.click()

# 点击'确定'按钮
# driver.find_element(By.XPATH, '//*[@id="layui-laydate5"]/div[2]/div/span[3]').click()

"""
方式二:模拟滑动到元素出现
"""
# 选择'时'
hours = driver.find_element(By.XPATH, '//*[@id="layui-laydate5"]/div[1]/div[2]/ul/li[1]/ol/li[1]')
el = driver.find_element(By.XPATH, '//*[@id="layui-laydate5"]/div[1]/div[2]/ul/li[1]/ol/li[23]')

# 定位滑动的起点
sliding_start = ScrollOrigin.from_element(hours)

ActionChains(driver).click_and_hold(hours).scroll_from_origin(sliding_start, 0, 600).click(el).perform()

        

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

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

相关文章

D-Insar操作全程记录

前言 本实例ENVI版本5.6 裁剪 使用工具: 第一个界面: 输入基于上述两个文件画的研究区域。参考文件选择标准:area.shp是基于那个图像画的就选哪个。因为哨兵1的坐标不是地理坐标,故基于哨兵1话的shp需要选择参考影像。如果是…

STM32HAL(四)中断与NVIC解析

目录 中断 中断作用与意义 NVIC 中断向量表 基本概念 功能和作用 NVIC工作原理 STM32中断优先级 1. 优先级分组 2. 优先级设置 3. 中断服务程序执行顺序 4. 配置方法 STM32 NVIC的使用 1,设置中断分组 2,设置中断优先级 3,使…

vue使用driver.js引导并自定义样式和按钮

参考网址https://driverjs.com/docs/installation 安装 npm install driver.js 以下是1.3.1版本的基本使用方法 import { driver } from driver.js import driver.js/dist/driver.css mounted() {// 实例化driver对象const driverObj driver({showProgress: true,steps: …

【mysql】【docker】mysql8-互为主从

🌸🌸 Linux/docker-compose/mysql8 互为主从 优雅部署 🌸🌸 记录下两台Linux的mysql需要热备份,互为主从,后期加上keepalived实现高可用切换 参考博客:答 案 🌸 一、准备文件 这里…

一文了解基于ITIL的运维管理体系框架

本文来自腾讯蓝鲸智云社区用户:CanWay ITIL(Information Technology Infrastructure Library)是全球最广泛使用的 IT 服务管理方法,旨在帮助组织充分利用其技术基础设施和云服务来实现增长和转型。优化IT运维,作为企业…

k8s node NotReady后会发生什么?

K8s 是一种强大的容器编排和管理平台,能够高效地调度、管理和监控容器化应用程序;其本身使用声明式语义管理着集群内所有资源模型、应用程序、存储、网络等多种资源,Node 本身又属于 K8s 计算资源,上面承载运行着各种类型的应用程…

141.字符串:重复的字符串(力扣)

题目描述 代码解决 class Solution { public:// 计算字符串s的next数组&#xff0c;用于KMP算法void getNext(int *next, const string& s){int j 0; // j是前缀的长度next[0] 0; // 初始化next数组&#xff0c;第一个字符的next值为0for (int i 1; i < s.size(); …

TAS5711带EQ和DRC支持2.1声道的20W立体声8V-26V数字输入开环D类数字功放音频放大器

前言 数字功放很难搞&#xff0c;寄存器很多&#xff0c;要配置正确才有声音&#xff0c;要想声音好&#xff0c;要好好调整。 TAS5711出道很多年了&#xff0c;现在仍然在不少功放、音箱中能看到。 TAS5711特征 音频输入/输出 从 18V 电源向 8Q 负载提供 20W 功率 宽 PVDD…

深度学习之Tensorflow卷积神经网络手势识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手势识别是计算机视觉和人工智能领域的重要应用之一&#xff0c;具有广泛的应用前景&#xff…

常用生物信息学服务器推荐

1、超强性能&#xff0c;AMD 256核心&#xff0c;512线程&#xff0c;2.5TB满通道内存&#xff0c;200T硬盘 CPU&#xff1a;2颗128核心 2.25GHz AMD EPYC 9754 内存&#xff1a;24根96GB DDR5 4800MHz ECC REG 硬盘&#xff1a;1块1TB U.2 SSD系统盘1块15.36TB U.2热数据盘…

2024 年 电工杯(A题)大学生数学建模挑战赛 | 园区微电网风光储协调| 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 CS团队倾注了大量时间和心血&#xff0c;深入挖掘解决方案。通…

pip换源ubuntu

到THU网站上有给定的教程 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 方法1 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package然后在https://pypi.org/project/nvidia-cublas-cu12/#files 里面搜索你的包名 方法2 python -m pip install --upg…

计算机毕业设计python+django医院住院挂号登记收费系统7ui9s

在该医院信息管理系统中&#xff0c;python技术可以给用户带来极大方便&#xff0c;其主要特点就是可以使用户学习起来方便、快捷&#xff0c;另一方面就是信息储存量也是非常大的&#xff0c;该功能主要被应用为数据库中进行查询和编程。并且该功能的数据应用比较灵活&#xf…

JVM优化之使用Jstack命令查找JVM死锁

JVM优化之使用Jstack命令查找JVM死锁 示例代码 public class DeadLockDemo {private static Object lock1 new Object();private static Object lock2 new Object();public static void main(String[] args) {new Thread(() -> {synchronized (lock1) {try {System.out.p…

新品 | Forge® 1GigE IP67工业相机助力智能农业、食品和饮料行业

近日&#xff0c;51camera的合作伙伴Teledyne FLIR IIS推出Forge 1GigE IP67,它是Forge系列的最新工业相机&#xff0c;旨在在恶劣的工业环境中运行&#xff0c;同时确保高效的生产能力。Forge 1GigE IP67致力于为工厂自动化提供先进成像系统的最新产品。 Forge 1GigE IP67相机…

Spring Cloud整合Sentinel

1、引入依赖 链接: 点击查看依赖关系 父pom <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>Sentinel应用直接引用starter <dependency><groupId&…

IDEA软件和插件安装

安装IDEA版本&#xff1a;IDEA windows 2021.1.3 使用该版本的IDEA&#xff0c;并且安装下面插件后&#xff0c;个人认为非常好用&#xff0c;并且可以不用破解&#xff0c;无限使用企业版&#xff0c;了解具体方法可以留言或私信。 记录几个好用的IDEA插件&#xff0c;后续持…

Linux实验五:进程间通信(一)

目录 一、实验目的二、实验内容三、实验环境四、参考代码五、实验步骤步骤1. 编辑源代码test5.c步骤2. 编译源代码test5.c步骤3. 运行可执行程序test5步骤4. 进一步调试源代码test5.c 六、实验结果七、实验总结 一、实验目的 1、理解Linux进程通信的基本原理和方法&#xff1b…

刷题之从前序遍历与中序遍历序列构造二叉树(leetcode)

从前序遍历与中序遍历序列构造二叉树 前序遍历&#xff1a;中左右 中序遍历&#xff1a;左中右 前序遍历的第一个数必定为根节点&#xff0c;再到中序遍历中找到该数&#xff0c;数的左边是左子树&#xff0c;右边是右子树&#xff0c;进行递归即可。 #include<vector>…

基于微信的家庭理财管理小程序的设计与实现(论文+源码)_kaic

摘 要 随着中国经济的飞速发展&#xff0c;家庭收入不断增高&#xff0c;人们的消费除了简单的维持日常生活之外&#xff0c;还有其他的消费方式&#xff0c;比如旅游、电商购物等&#xff0c;层出不穷的消费方式带给人快乐的同时&#xff0c;也常常让一些人逐渐无法把握住自…