在做某个测试时,要在文本框中输入大量的文本,文件内容如下:

"-----BEGIN CERTIFICATE-----\n
MIIBozCCAQwCAQEwDQYJKoZIhvcNAQEFBQAwGjEYMBYGA1UEAwwPY2EtaW50QGFj\n
\"bWUuY29tMB4XDTE2MDMwNzExNTcyOVoXDTI2MDMwNTExNTcyOVowGjEYMBYGA1UE\n“
\"AwwPc2VydmVyQGFjbWUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+\n"
"RI+2JepsS1UuuLNne3sk/1nuLdXsDN/VH1+80tzfijSduFK3c+sg4NNwXsqV3D5Y\n"
"E1Ymi0/fvhRdo7J9yJJNq4ZM42nIgTM5jV9BW8JlE7UHZTUP3YomJcnTjfrsH2U5\n"
"rJPuxvwxJukrDDYqrrS/37Nhrr3UbMUBDETLFGg9BQIDAQABMA0GCSqGSIb3DQEB\n"
"BQUAA4GBACKvFUpVayVWgDGdwZpkr0EgXyifjO36a8IqTA55Bj4/5VLyUt+sCvNz\n"
"6Up64t+akAGPajrDv5IrmwDGYj88fE/vTd1lmCkt8Xi8ODgDhASQYh0lzEQ2nzyU\n"
"L7gyKtPvfZG5BZuf7whrV6y7klGDia9qL4dCmNUbOyRBeJON2DR5\n"
"-----END CERTIFICATE-----"

在FireFox中使用sendkeys输入时,等待很久后提示

此页面的某个脚本可能正忙,或者已停止响应。您可以立即终止该脚本、在调试器中打开该脚本,或者继续等待该脚本完成

在使用chrome sendkeys后,没有提示错误,但耗时很久。

解决思路:

1、查看问题原因:

看看sendkeys实现原理:

def send_keys(self, *value):
"""Simulates typing into the element. :Args:
- value - A string for typing, or setting form fields. For setting
file inputs, this could be a local file path. Use this to send simple key events or to fill out form fields:: form_textfield = driver.find_element_by_name('username')
form_textfield.send_keys("admin") This can also be used to set file inputs. :: file_input = driver.find_element_by_name('profilePic')
file_input.send_keys("path/to/profilepic.gif")
# Generally it's better to wrap the file path in one of the methods
# in os.path to return the actual path to support cross OS testing.
# file_input.send_keys(os.path.abspath("path/to/profilepic.gif")) """
# transfer file to another machine only if remote driver is used
# the same behaviour as for java binding
if self.parent._is_remote:
local_file = self.parent.file_detector.is_local_file(*value)
if local_file is not None:
value = self._upload(local_file) self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': keys_to_typing(value)})

再看keys_to_typing 可以看出,sendkeys是一个字符一个字符发的,所以在长文本时时间肯定会长,且在firefox中好像还有相关超时限制,这个不得而知了。

既然这样的话,就不用senkeys 来输入文本了。

解决方案二个:

1、使用js来输入

示范代码

js='document.getElementsByTagName("textarea")[0].value="'+lb_cert+"'"
driver.execute_script(js)

因为元素没有id,所以只能用tagName

2、使用复制黏贴方式:

将文本写入粘贴板,然后再发送CTRL+v,快速输入,但需要安装第三方库

至于粘贴板后方法,python里太多库可以支持,这里偷懒,从stackoverflow 拿来一段代码直接使用

import win32clipboard  

def copy(text):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()
def paste():
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()
return data text=u"这里写需要粘贴的文字"
copy(text) --放入粘贴板
driver.findElements(By.tagname("textarea")).type(Keys.chord(keys.control, 'v')); ---粘贴

这里,可以根据实际使用不用的方法来实现

web自动化时,sendkeys输入长文本时浏览器响应慢或错误时处理的更多相关文章

  1. 记:linux服务器启动重启WEB项目启动成功,长时间卡住未响应

    问题 云服务器部署web项目,每次正常启动项目后访问页面很久才能有响应,一直卡在INFO: Deploying web application directory ......长达几分钟以上,极度影响 ...

  2. WEB自动化(Python+selenium)的API

    在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                         ...

  3. <q>标签,短文本引用;<blockquote>标签,长文本引用

    <q>标签,短文本引用 <q>引用文本</q>,默认显示双引号,不需要在文本中添加 <blockquote>标签,长文本引用 浏览器对<block ...

  4. Delphi: TLabel设置EllipsisPosition属性用...显示过长文本时,以Hint显示其全文本

    仍然是处理多语言中碰到问题. Delphi自2006版以后,TLabel有了EllipsisPosition属性,当长文本超过其大小时,显示以...,如下图: 这样虽然解决显示问题,但很显然,不知道. ...

  5. 用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)

    做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号“2546541656596”,excel会自动变成科学计数法... 弄过好几次都没有解决,最近又要导出excel ...

  6. web自动化页面元素不能键盘输入

    一.背景 web自动化中存在一部分元素属性是readonly属性,导致我们在使用自动化代码的时候无法使用sendkeys()方法传入数据,以12306网站选择出发日期为例,见下图 二.json语句处理 ...

  7. 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A,B,C,D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生,若输入的不是A,B,C,D则视为无效票,选举结束后按得票数从高到底输出候选人编号和所得票数.

    模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A,B,C,D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生,若输入的不是A,B,C,D则视为无效票,选举结束后按得票数从 ...

  8. 设置Git提交时不用输入用户名和密码

    在用git提交时代码至github上时每次都要输入用户名和密码,当提交操作较为频繁时非常不方便,可以按下文中的介绍,设置成提交时不用输入用户名和密码: 1.在当前库下,已经运行过 git remote ...

  9. spa(单页应用)中,使用history模式时,微信长按识别二维码在ios下失效的问题

    spa(单页应用,vue)中,使用history模式时,微信长按识别二维码在ios下失效的问题. 触发条件: spa单页应用: 路由模式 history 从其他页面跳转到带有微信二维码识别的页面(不是 ...

随机推荐

  1. UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数

    lienhua342014-11-05 sigaction 函数跟 signal 函数一样,用于设置信号处理函数.此函数是用于取代 UNIX 早期版本使用的 signal 函数.UNIX 早期版本的 ...

  2. 协助CIO成功实施ITIL

    如今,企业在日渐复杂的IT基础架构和应用服务上所做出的投资越来越庞大.有数据显示,财富500强在IT上的平均开支已达到了3亿5千万美元. 为了清楚地认识IT投资所能带来的价值,企业应考虑改善服务管理流 ...

  3. 转载SQL容易产生的错误问题

    概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见问题,还有一些平时收集的其它一些问题,这也是很多人容易忽视的问题,在以后收集到的问题会补充在文章末尾,欢迎关注,由于收集的问 ...

  4. logback.xml常用配置详解

    <?xml version="1.0" encoding="UTF-8"?><configuration debug="false& ...

  5. C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解

    from:https://blog.csdn.net/li315171406/article/details/78450534 最近要做一个大数据dataTable循环操作,开始发现 运用foreac ...

  6. FPGA连接

    别人推荐,暂时存这了: http://www.eepw.com.cn/news/fpga

  7. 【重要】攻击动作时间段判断~使用动画time比较动画length和使用一个变量数组做延迟

    using UnityEngine; using System.Linq; using System.Collections.Generic; [RequireComponent(typeof(Cha ...

  8. [Vim] Vim 常用基本操作

    1. 导航 1.1. 查看行号 :set number  显示行号 :set number!  隐藏行号 :.=  在底部显示当前行号 :=  在底部显示总行号 1.2. 移动光标 0 或 ^    ...

  9. ibatis 引入多个model

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "- ...

  10. 嵌入式ROOTFS transplantation

    作一个嵌入式Linux rootfs,并且实现 web 服务 1. 文件系统简介 •理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目 ...