Python Selenium send_keys ~如何发送高级Unicode字符

ycggw6v2  于 2023-04-12  发布在  Python
关注(0)|答案(1)|浏览(151)

为了编写一个测试用例来测试一个字符串输入字段是否真的能在所有可能的输入中存活下来,我编译了一个“Omega Death String”,其中包含了当前每个Unicode块中的一个字符。如下所示:

␡ÆĦǣʨ˧͚ΔѨ֍ࢥޛچضغ߷ࠇउगऴ৳ਸ਼ષନஹౙಯ൷ෂท໖༺ဪჭᆅቘᎆᎹᐇᚙᛤᜇᜰᝇᝧ៘ᢆᣢᢆᢆᡆᤗᥘᦜ᧻ᨋᩗ᪶ᬑᮼᯥᰒᱫᲇ᳄᳷ᵹᶋ᷼ỸὮ※ₘ₹⃟™ↈ↹∰⌦␥⑆⓭╃▙◍♅❦⟗⟹⡕⥇⧉⩷⭖Ⱗⱷ𔒒⳧ⴥⵥⶻⷵ⸾⻭⽧⿷〶きラ鏡狐ㄦㅶ㆗ㆧ㇡ㇺ㈿㍇㑴䷺亘ꁚ꓂ꓩꔫꚖꚼ꜕Ꝧꠚ꠷ꡪꢸꣶꤥꥅꥺ꧄ꧨꩆꩶ꫞ꫩꬤꭔꮚ꯹걗ퟶ珞ﬦﮖ︌︗︩︾﹠ﻉレ￿𐁖𐁖𐄩𐅥𐆠𐇒𐊃𐋈𐋭𐌆𐍊𐍫𐎆𐎢𐐦𐑸𐒦𐓨𐔣𐕗𐛪𐠩𐡗𐡸𐢙𐣴𐤇𐤸𐦖𐧧𐩕𐩸𐪗𐫘𐬳𐭞𐭬𐮯𐰦𐲬𐹽𑁍𑂌𑃦𑄻𑅥𑇚𑇴𑈥𑊗𑋃𑌆𑑘𑒦𑒦𑘦𑙦𑚅𑜿𑣯𑨧𑪞𑫸𑰹𑲧𑴔𒀚𒐧𒒲𓃣𔒒𖡗𖩧𖫪𖭅𖼼𖿡𗀗𘠷𛁉𛄕𛆶𛱷𛲢𛲢𝁅𝄞𝈝𝍖𝍨𝒬𝡇𞀘𞡨𞡨𞥟𞥟𞹧🀨🁾🂡🆨🈵🌜😸🙥🛸🝖🟁🢪🦊𠁧冤

我最初尝试通过send_keys发送Omega死亡字符串,但结果是selenium.common.exceptions.WebDriverException: Message: missing command parameters
我也尝试过使用execute_script通过JavaScript发送它,以及尝试发送该字符串的unicode编码版本,但这两种方法都不起作用。
现在,我想我只会修剪Omega Death String,使其只包含来自基本多语言平面的字符,但如果有人能找到一种使用Selenium for Python可靠地输入它的方法,我会非常感兴趣。

y4ekin9u

y4ekin9u1#

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

相关问题