最近在做UI自动化,出现点击按钮复制文案到剪切板的操作,由于执行机器有mac、win10、liunx,出现不同的兼容问题,简单记录一下

1、常用获取方式

Python xerox模块

import xerox
xerox.copy(str)  # 复制内容到剪切板
xerox.paste()  # 读取剪切板内容# Liunx可以选择粘贴到xsel中
xerox.copy(str, xsel=True)
xerox.paste(xsel=True)

Python pyperclip模块

import pyperclip
pyperclip.copy(str)  # 复制内容到剪切板
pyperclip.paste()  # 读取剪切板内容

命令行获取

Windows

复制
clip < file.txt
echo file.txt | clip粘贴
clip > file.txt  # 写入文档
powershell -command "Get-Clipboard"  # 直接输出到命令行

Mac

复制
pbcopy < file.txt
cat file.txt | pycopy粘贴
pbpaste > file.txt  # 写入文档
pbpaste  # 直接输出到命令行

Liunx

复制(到 gnome 的剪贴板)
xsel < file.txt
cat file.txt | xsel
xsel --input --clipboard    # copy to clipboard粘贴
xsel > file.txt  # 写入文档
xsel --output --clipboard   # get from clipboard

Ubuntu

sudo apt-get install xclip  # 需要先安装xclip复制(到 gnome 的剪贴板)
xclip -selection < file.txt
cat file.txt | xclip -selection粘贴
xclip > file.txt

2、遇坑

由于UI自动化是selenium+chrome,出现不兼容问题

2.1 mac

chrome页面模式/headless模式 均可正常获取

2.2 win

chrome页面模式可以正常获取;headless模式不能写入系统剪切板

  • 发现每次返回的都是上一次复制的内容
  • 使用xerox、pyperclip包均不可行
  • 尝试在用例执行过程中不停执行命令行,发现headless模式下不会将复制到的内容写入剪切板

2.3 centos

无法获取系统剪切板

  • 使用xerox包获取,获取到的剪切板内容为None
  • 使用命令行xsel --output --clipboard获取,仍然返回None
  • 使用pyperclip包报错PyperclipException:Pyperclip could not find a copy/paste mechanism for your system.(搜索需要安装xsel xclip,后续安装无果)

解决方式

作为英语渣渣熟练的command+v复制文本到百度翻译,突然冒出一个想法“管你什么系统ctrl+v粘贴没毛病”,开搞

from selenium.webdriver import ActionChainsfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.common.exceptions import TimeoutExceptionself.driver.execute_script('window.open("")')  # 打开一个新窗口self.driver.switch_to.window(self.driver.window_handles[-1])  # 进入新窗口self.driver.get(url='https://fanyi.baidu.com/')  # 访问百度翻译exit = Truetry:WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, 'desktop-guide-close')))  # 发现会有个广告弹窗,强制等待检查下是否出现弹窗except TimeoutException:exit = Flaseif exit == True:self.driver.find_element(*(By.CLASS_NAME, 'desktop-guide-close')).click()  # 点击广告弹窗X按钮self.driver.find_element(*(By.ID, "baidu_translate_input")).click()  # 点击输入框ac = ActionChains(self.driver)  # 模拟键盘操作if self.platform == 'MacOS':  # mac为command+vac.key_down(Keys.COMMAND).send_keys('v').perform()elif self.platform == 'Windows':  # win为control+vac.key_down(Keys.CONTROL).send_keys('v').perform()elif self.platform == 'Linux':  # liunx为control+shift+vac.key_down(Keys.CONTROL).key_down(Keys.SHIFT).send_keys('v').perform()result = self.driver.find_element(*(By.ID, "baidu_translate_input")).get_attribute("value")  # 获取输入框内容self.driver.close()  # 关掉当前窗口self.driver.switch_to.window(self.driver.window_handles[-1])  # 会到原窗口

运行发现没毛病,mac、win、liunx通吃,问题解决下班回家

各系统剪切板内容获取相关推荐

  1. js获取剪切板内容(企业微信内嵌网页)

    js获取剪切板内容 应用场景 剪切板内容获取 腾讯会议获取会议时间.会议链接和会议号 更新========================= 企业微信页面剪切板内容读取 iPhone无法进入页面 零宽 ...

  2. Android 10 获取剪切板内容

    一般可以放在Activity的onResume中调用如下方法: //获取剪切板内容 private void getClipboardData() {this.getWindow().getDecor ...

  3. 【vim】系统剪切板、vim寄存器之间的复制粘贴操作命令?系统剪切板中的内容复制粘贴到命令行?vim文本中复制粘贴到命令行

    一.系统剪切板和文本内容的复制粘贴 1.1 从系统剪切板复制粘贴到文本中 需要操作3次: 分别是英文双引号.一个加号或梅花号,最后是一个p 也即"+p 或者直接使用组合键[Shift + i ...

  4. python获取剪切板图片_python 获取剪切板内容的两种方法

    第一种 # -*- coding: utf-8 -*- # @Time : 2020/3/16 21:26 # @File : get_text_from_cupboard_13.py # @Auth ...

  5. tmux系统剪切板_实践中的tmux:与系统剪贴板集成

    tmux系统剪切板 by Alexey Samoshkin 通过阿列克谢·萨莫什金(Alexey Samoshkin) 在实践中使用tmux:与系统剪贴板集成 (tmux in practice: i ...

  6. C语言学习:除去剪切板内容的换行与回车

    前言 我们在复制PDF文件文本内容的时候,常常为文本中多了些换行符而困扰,所以作者特地制作一个程序解决这个问题. 程序说明 作者为博主:余宁C 程序自动将剪切板中的回车或者换行替换为空格,每1s执行一 ...

  7. 监听剪切板内容,解决复制粘贴内容格式错乱

    我们在进行编辑东西时经常会参考一些论坛或回答,针对图片和文字都有的html文本直接复制粘贴的话就会出现文字显示重叠,或者字号异常.如果我们要重新排版的话,就需要只截取文字,然后对图片下载后重新编辑.其 ...

  8. android读取剪切板的方法,Android复制粘贴剪切板内容的一种方法

    1 Clipper介绍 Clipper是一款简单的app, 它可以通过一行adb shell命令来和安卓系统剪切板服务交互. 官方说明:https://github.com/majido/clippe ...

  9. vim在系统剪切板的复制与粘贴

    以前就遇到过的问题.有如下情景: 1.假设现在我要将文件a的部分内容复制到文件b中,一般情况,我会用vs或者sp命令打开这两个文件然后用y和p进行复制粘贴.但是如果分别用vim打开这两个文件就不能完成 ...

最新文章

  1. kvm--virsh命令行下管理虚拟机
  2. 海思3536:kernel编译和mpp_single编译过程报错及解决方法
  3. 【更新】PPT管理控件Aspose.Slides V17.5发布 | 附下载
  4. Gradle入门:集成测试
  5. tomcat如何通过配置的方式部署web工程
  6. Dubbo常见面试题与答案
  7. 小游戏-扑克牌-Java
  8. 计算机网络带宽是什么意思,网络带宽是怎么计算的?
  9. ROS笔记(32) MoveIt!关节控制器
  10. 命令发送广播_那些你不知道的ping命令参数
  11. uni app input添加获取验证码按钮_FILEX | 如何在UniSwap挖到UNI?
  12. html 悬停显示标题,JS实现TITLE悬停长久显示效果完整示例
  13. How to Use File Choosers
  14. 人脸识别ArcfaceDemo for Windows 分享
  15. BUPT复试专题—密码(2009)
  16. 华为交换机初始化_华为交换机初始设置
  17. Fiddler抓包https配置
  18. HTTP中的status code什么意思
  19. 复盘:企业微信中国发展简史
  20. CDN加速是什么?具体有什么用?

热门文章

  1. 记一次对恶意LNK文件的分析
  2. 邓州二高中2021年高考成绩查询,邓州一高、二高、花洲实验高中高考成绩喜报!...
  3. java 重量级锁_轻量级锁和重量级锁的区别分别有哪些?java锁机制教程
  4. 手机IMEI是什么?有什么作用?如何检查它?
  5. 「第十二章」Web框架安全
  6. 屏蔽QQ空间个人中心“大家都在看”模块方法
  7. matlab中短时傅里叶变换tfrstft函数用法
  8. 狂揽2500星,开源十六进制编辑器登顶GitHub热榜
  9. IMS网络标准发展历史
  10. Android安全检测 - 日志信息泄露