热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pythonseleniumsend_keys表情符号支持

如何解决《Pythonseleniumsend_keys表情符号支持》经验,有好办法吗?

我正在尝试使用selenium的send_keys将表情符号字符发送到带有以下python代码的文本框中.

browser = webdriver.Chrome(chrome_optiOns=options)
browser.get("https://www.google.co.in")
time.sleep(5)
working = browser.find_element_by_id('lst-ib')
text = u'Python is '
working.send_keys(text)

我收到以下错误.

Traceback (most recent call last):
  File "smiley.py", line 30, in 
    working.send_keys(text)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 347, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': keys_to_typing(value)})
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 491, in _execute
    return self._parent.execute(command, params)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 238, in execute
    self.error_handler.check_response(response)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 164, in check_response
    raise exception_class(value)
selenium.common.exceptions.WebDriverException: Message: missing command parameters

在搜索时我发现selenium send_keys仅支持单字节字符.但我想知道,如果有任何其他方式我可以做到这一点.

我尝试过使用CTRl + C和CTRL + V组合,它正在运行.但有时剪贴板内容在粘贴之前会被更改(复制和粘贴几乎立即发生).

我无法使用execute_script设置字段的值,因为它不是输入元素而是跨度.我可以在我的用例中设置inner_text但无用.

更新: 我已经使用一些解决方法来解决剪贴板覆盖问题.工作代码如下.

schedule = urllib2.urlopen(request,cOntext=ctx)
text = schedule.read().decode('utf-8')
elem = browser.find_element_by_class_name(xpathObj['commentLink'])
elem.click()
time.sleep(2)
ActionChains(browser).send_keys('a').perform()
time.sleep(2)
copy_attempt = 0
while True:
    span_element = browser.find_element_by_xpath(xpathObj['commentSpan'])
    browser.execute_script("arguments[0].innerText = arguments[1]", span_element, text)
    time.sleep(2)
    ActionChains(browser).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
    time.sleep(1)
    ActionChains(browser).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).key_down(Keys.CONTROL).send_keys('V').key_up(Keys.CONTROL).perform()
    time.sleep(1)
    win32clipboard.OpenClipboard()
    text1 = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
    emoji_pattern = re.compile(
        u"(\ud83d[\ude00-\ude4f])|"  # emoticons
        u"(\ud83c[\udf00-\uffff])|"  # symbols & pictographs (1 of 2)
        u"(\ud83d[\u0000-\uddff])|"  # symbols & pictographs (2 of 2)
        u"(\ud83d[\ude80-\udeff])|"  # transport & map symbols
        u"(\ud83c[\udde0-\uddff])"   # flags (iOS)
        "+", flags=re.UNICODE)
    s = difflib.SequenceMatcher(None,emoji_pattern.sub(r'', text), emoji_pattern.sub(r'', text1))
    if (s.ratio() <1.0):
        if (copy_attempt <5):
            copy_attempt = copy_attempt + 1
            continue
        else:
            break
    else:
        ActionChains(browser).send_keys(Keys.RETURN).perform()
        time.sleep(3)
        break
time.sleep(3)

谢谢你们.


推荐阅读
author-avatar
cl357_475
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有