python - Python Selenium send_keys ~ 如何发送高级 Unicode 字符
问题描述
为了编写一个测试用例来测试字符串输入字段是否真的能在所有可能的输入中存活,我编译了一个“Omega Death String”,其中包含来自每个当前 Unicode 块的字符。这里是:
␡ÆĦǣʨ˧͚ΔѨ֍ࢥޛچضغ߷ࠇउगऴ৳ਸ਼ષନஹౙಯ൷ෂท໖༺ဪჭᆅቘᎆᎹᐇᚙᛤᜇᜰᝇᝧ៘ᢆᣢᢆᢆᡆᤗᥘᦜ᧻ᨋᩗ᪶ᬑᮼᯥᰒᱫᲇ᳄᳷ᵹᶋ᷼ỸὮ※ₘ₹⃟™ↈ↹∰⌦␥⑆⓭╃▙◍♅❦⟗⟹⡕⥇⧉⩷⭖Ⱗⱷ⳧ⴥⵥⶻⷵ⸾⻭⽧⿷〶きラ鏡狐ㄦㅶ㆗ㆧ㇡ㇺ㈿㍇㑴䷺亘ꁚ꓂ꓩꔫꚖꚼ꜕Ꝧꠚ꠷ꡪꢸꣶꤥꥅꥺ꧄ꧨꩆꩶ꫞ꫩꬤꭔꮚ꯹걗ퟶ珞ﬦﮖ︌︗︩︾﹠ﻉレ
我最初尝试通过 发送 Omega 死亡字符串send_keys
,但结果是selenium.common.exceptions.WebDriverException: Message: missing command parameters
.
我也已经尝试通过 JavaScript 使用 发送它execute_script
,并尝试发送该字符串的 unicode 编码版本,但都没有奏效。
现在,我想我将修剪 Omega Death String 以仅包含来自基本多语言平面的字符,但如果有人想出一种使用 Selenium for Python 可靠地输入它的方法,我会非常感兴趣。
解决方案
这将解决以默认用户身份运行 Chrome 的 Linux 环境中的问题:
def paste(str):
from subprocess import Popen, PIPE
p = Popen(['xsel', '-bi'], stdin=PIPE)
p.communicate(input=str)
paste(description)
element.send_keys(Keys.CONTROL,"v")
如果您没有程序 xsel,您可以使用类似sudo yum install xsel
.
如果您以非默认用户身份运行 Chrome 以尝试记住 cookie 等,这将不起作用。作为记录,以下是您成为非默认用户的方式:
opts.add_argument("user-data-dir=/home/user/.config/google-chrome/selenium")
opts.add_argument('headless')
opts.add_argument('no-sandbox')
browser = webdriver.Chrome(chrome_options=opts)
上例中的 selenium 目录是该目录中的 Default 目录的副本。
因此,就我而言,我开发了一些代码来检查我希望发布的文本,如果我有非 BMP 文本,则以默认用户身份运行脚本。(我更喜欢以非默认用户身份运行,所以我不会像疯了一样登录网站。)
推荐阅读
- javascript - 默认值为空时如何使Vue材质选择框显示选项?
- c# - 亚马逊 MWS Feed API - 我们多久可以提交“_POST_INVENTORY_AVAILABILITY_DATA_”Feed?
- gradle - 如何让 IntelliJ 忽略 gradle sourceSets 的子集?
- c# - 尝试在 linux 中构建 Azure 函数应用程序,以下错误返回“未找到作业函数。尝试公开您的作业类和方法”
- ruby-on-rails - Rails 中的乐观锁定不允许在控制台中修改记录
- node.js - 从查询 mongoose 中删除字段
- jenkins - 如何减少詹金斯管道脚本的长度?
- c++ - 就地重新初始化对象
- android - 改造:预期 BEGIN_ARRAY 但在第 1 行第 2 列路径处是 BEGIN_OBJECT
- mapbox - 将 Geoserver 图层组添加到使用 mapbox-gl-js 创建的地图中