【问题标题】:Paste command using Selenium使用 Selenium 粘贴命令
【发布时间】:2015-04-22 15:50:56
【问题描述】:

我在 Windows 7 上使用 Python 2.7 和 Selenium 2-44-0。我正在寻找一种比使用 send_keys 更快的文本输入方式。 Send_keys 将一次打印 1 个字母(更好地模仿实际用户)。我想要一种将它们一次打印出来的方法,就好像内容被粘贴了一样。

例如,Sikuli 具有以下功能:

paste("this will all populate the field at the same time")

我想知道是否有一种方法可以在 Python 中编写具有相同结果的方法。所以,而不是:

el.send_keys("this will do 1 letter at a time")

有类似的东西

el.paste_keys("this will do the entire line at once")

由于上述命令需要向 selenium 功能添加代码,因此使用 python 方法可能更有意义。也许是这样的:

def paste_keys(self, xpath, text):
    os.environ['CLIPBOARD'] = text
    el = self.driver.find_element_by_xpath(xpath)
    el.send_keys(Keys.CONTROL, 'v')

不过,使用该环境变量实际上并不充当“副本”,而且我不知道如何在不下载第三方软件的情况下从代码级别设置剪贴板。

【问题讨论】:

    标签: python selenium clipboard sikuli


    【解决方案1】:

    这行得通:

    from selenium.webdriver.common.keys import Keys
    
    def paste_keys(self, xpath, text):
        os.system("echo %s| clip" % text.strip())
        el = self.driver.find_element_by_xpath(xpath)
        el.send_keys(Keys.CONTROL, 'v')
    

    %s 后面不能有空格,因为它会将空格添加到复制的文本中。

    【讨论】:

    • 在文本上使用strip() 方法怎么样? split 不是你想要的。
    • 错字;我的意思是放条。但是,它仍然保留了空间。它似乎是在进入剪贴板之后添加的,所以我需要一种将剪贴板值设置为变量或其他东西的方法,以便我可以从那里编辑它
    • 啊哈!弄清楚了。 “echo %s | clip”这一行正在识别 %s 和 | 之间的空间。作为正文的一部分;我删除了它,不再有空格
    • 太棒了。但出现错误:NameError: name 'Keys' is not defined
    • @AdilSaju 您可能想先导入密钥from selenium.webdriver.common.keys import Keys
    猜你喜欢
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2011-11-25
    • 2015-01-13
    • 2014-12-02
    • 2020-02-14
    相关资源
    最近更新 更多