当前位置: 首页 > article >正文

【Python】使用 selenium模拟敲键盘输入的方法汇总

我在使用selenium弄模拟登陆,需要模拟输入账号和密码,往往都使用 seleniumsend_keys 函数。

可是我昨天在写测试的时候,有时候有些网站,居然使用send_keys 函数,无法在输入框里输入文字!

在Python中,你可以使用多种方式来模拟键盘输入。

以下是一些常见的方法:

1. 使用 seleniumsend_keys 函数

这是最基本的方法,适用于需要用户手动输入的情况,不涉及模拟键盘输入。

user_input = wait.until(EC.presence_of_element_located((By.XPATH, "/html/")))
user_input.send_keys("密码")

有时候,这个方法对一些网站无效,具体表现在,怎么定位输入键的Xpath都没有效果,无法定位位置,导致无法操作。

这样的话,要么刷新网页,要么使用后面的方法。

2. 使用 pyautogui

在我使用 selenium 传统的的send_keys 函数输入值的方法,发现不太行后,使用js的方法也不行(最后那个方法)。

于是,尝试了一下pyautogui来,模拟鼠标和键盘操作。

在运行前,需要安装 pyautogui

pip install pyautogui

要先找到目标输入的位置:

sleep(6) #把鼠标放在目标获取的位置,获取位置信息
current_position = pyautogui.position()
print(f"当前鼠标位置:X={current_position.x}, Y={current_position.y}")

在这里插入图片描述

然后,你可以使用它来模拟键盘输入:

import pyautogui

# 移动鼠标到一个文本框位置(这里以屏幕上的坐标为例)
pyautogui.click(100, 100) #输入上面返回的xy的位置信息

# 输入文本
pyautogui.write('Hello, World!', interval=0.25)

如果是要模拟点击enter键,则是

# 模拟按下 Enter 键
pyautogui.press('enter')

到这里就成功啦,只是pyautogui有个不太好的是,它会占用鼠标和键盘的使用,如果我们想要在一边使用selenium运行的时候,也同时使用键盘和鼠标,就会影响或者中断运行的程序,不太方便。

所以如果非必要情况,还是使用xpath/css定位法会更好

3. 使用 pynput

pynput 是另一种可以用于模拟键盘和鼠标事件的库。

首先,安装 pynput

pip install pynput

使用 pynput 模拟键盘输入:

from pynput.keyboard import Controller, Key

keyboard = Controller()

# 输入文本
keyboard.type('Hello, World!', interval=0.25)

# 按下回车键
keyboard.press(Key.enter)
keyboard.release(Key.enter)

4. 使用js输入的操作

jsStr = "var d = document.getElementsByClassName('user');d.value='世sdf 言';"
driver.execute_script(jsStr)

但是个人觉得效果不佳hhh


http://www.kler.cn/a/508822.html

相关文章:

  • 44.ComboBox的数据绑定 C#例子 WPF例子
  • Lora理解QLoRA
  • C#-方法(函数)
  • MySQL SQL优化技巧与原理
  • 电商项目-基于ElasticSearch实现商品搜索功能(三)
  • 计算机网络 (45)动态主机配置协议DHCP
  • docker-compose和docker仓库
  • Vi 和 Vim 文本编辑器使用指南
  • 线程池面试题目集合
  • LLM - 大模型 ScallingLaws 的 C=6ND 公式推导 教程(1)
  • 1.Spring AI 从入门到实践
  • 2025年应用与API安全展望:挑战与机遇并存
  • 青少年编程与数学 02-007 PostgreSQL数据库应用 05课题、结构化查询语言(SQL)
  • 1.6 阅读k8s源码的准备工作
  • Android 12.0 息屏休眠后立即启动屏保功能实现
  • SpringMVC 实战指南:打造高效 Web 应用的秘籍
  • 外包公司名单一览表(成都)
  • 《C++11》中的显式虚函数重载:深入理解与应用
  • 【数据分析(二)】初探 Pandas
  • Java中线程的学习
  • EI Scopus双检索 | 2025年第四届信息与通信工程国际会议(JCICE 2025)
  • redis.call()和redis.pcall()的区别
  • uniapp 微信小程序 editor 富文本编辑器
  • SpringBoot中Get请求和POST请求接收参数详解
  • STM32--定时器输出pwm知识点_stm32 pwm-CSDN博客
  • Python毕业设计选题:基于django+vue的智能租房系统的设计与实现