首页 > 解决方案 > 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 可靠地输入它的方法,我会非常感兴趣。

标签: pythonseleniumspecial-characters

解决方案


这将解决以默认用户身份运行 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 文本,则以默认用户身份运行脚本。(我更喜欢以非默认用户身份运行,所以我不会像疯了一样登录网站。)


推荐阅读