【问题标题】:How to paste text from clipboard on mac while running selenium - Python如何在运行 selenium 时在 mac 上粘贴剪贴板中的文本 - Python
【发布时间】:2018-07-13 11:04:26
【问题描述】:

我有一个函数可以验证复制到剪贴板的数据

def verify_copied_transcript_data(self):
    selector = '//input[@type="text" and @name="topic"]'
    topic_field = self.wait_for_element_by_xpath(selector)
    topic_field.clear()
    topic_field.send_keys('')
    topic_field.send_keys(Keys.COMMAND, 'v')
    topic_field_value = topic_field.get_attribute('value')
    self.assertTrue(len(topic_field_value) > 0)

我已经验证手动 CMD + v 确实将复制的文本粘贴到 topic_field 上。知道为什么 selenium 不会模拟 topic_field.send_keys(Keys.COMMAND, 'v')

复制文本的函数是:

def click_copy_transcript(self):
    selector = '//div[@id="closeChatModal"]//span[contains(text(), "Copy All")]'
    self.wait_for_element_by_xpath(selector).click()

这会复制剪贴板上的文本

【问题讨论】:

  • 为什么要通过组合键而不是简单的send_keys("text to input")粘贴文本?
  • @Andersson 正如函数所述,我需要验证剪贴板上复制的文本
  • 好的。 复制文本的代码在哪里?
  • @Andersson 在描述中添加

标签: python python-3.x selenium selenium-webdriver pyperclip


【解决方案1】:

这个怎么样:

ActionChains(driver).key_down(u'\ue03d').key_down('v').perform()

甚至:

ActionChains(driver).key_down(u'\ue03d').send_keys('v').perform()

我已经在 PC 上使用 Control 键而不是 Command(显然!)对其进行了检查,并且两者都有效。

附言。也许首先您可能需要模拟点击您要粘贴缓冲区的字段。

【讨论】:

  • 非常感谢!希望我能对此投票 1000 次,花了太多时间尝试不同的东西,但这些东西不起作用
【解决方案2】:

试试这个:

topic_field.send_keys(Keys.COMMAND + 'v')

完整的代码是:

def verify_copied_transcript_data(self):
    selector = '//input[@type="text" and @name="topic"]'
    topic_field = self.wait_for_element_by_xpath(selector)
    topic_field.clear()
    topic_field.send_keys('')
    topic_field.send_keys(Keys.COMMAND + 'v')
    topic_field_value = topic_field.get_attribute('value')
    self.assertTrue(len(topic_field_value) > 0)

你也可以尝试使用ActionChains:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

ActionChains(driver) \
    .key_down(Keys.COMMAND) \
    .key_down('v') \
    .key_up('v') \
    .key_up(Keys.COMMAND) \
    .perform()

【讨论】:

  • 我又增加了一个建议,请看一下
【解决方案3】:

正如您提到的,以下代码将文本复制到剪贴板

def click_copy_transcript(self):
    selector = '//div[@id="closeChatModal"]//span[contains(text(), "Copy All")]'
    self.wait_for_element_by_xpath(selector).click()

现在,要从剪贴板复制文本,您可以使用Pyperclip – A cross-platform clipboard module for Python中的paste()方法,如下所示:

import pyperclip

def click_copy_transcript(self):
    selector = '//div[@id="closeChatModal"]//span[contains(text(), "Copy All")]'
    self.wait_for_element_by_xpath(selector).click()
    topic_field.send_keys(pyperclip.paste())

注意:根据adam-p/cb.py,它被称为:

将文本复制到剪贴板的 Python 函数(目前仅支持 Windows)。

【讨论】:

  • pyperclip.paste() 在这种情况下仍然只是发送文本,它似乎不是真正的 CTRL+V。
  • 这不会产生任何粘贴事件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 2017-12-23
  • 2014-10-25
相关资源
最近更新 更多