前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Alfred + Selenium 编写第一个 Workflow

使用 Alfred + Selenium 编写第一个 Workflow

作者头像
airmelt
发布2022-12-02 11:25:22
9300
发布2022-12-02 11:25:22
举报
文章被收录于专栏:air的代码小屋air的代码小屋

本文主要简单介绍了 Alfred 的功能,浏览器自动化工具 Selenium 的功能以及代码示例,最后介绍了如何编写一个简单的 Alfred Workflow 来提高工作效率。

Alfred 简介

Alfred 是 Mac 上的效率神器,有了它,你几乎可以用键盘完成一切工作。通过自定义配置,减少重复操作,可以做到 Don't Repeat Yourself。并且你可以免费使用基本功能。

基础命令

打开 Alfred 快捷键可以设置为 option + space,大部分 Mac 的快捷键使用的是 command,设置成 option 可以避免冲突 在软件界面按上或者下能够选择高亮的项目,return 可以确定选择 使用 command + 数字键 能够快速定位到某个项目 shift 可以预览(preview)文件

文件

open/空格 + 文件名:打开文件,如果使用 command⌘ + return↵ 可以打开文件所在文件夹 find + 文件名:打开文件所在文件夹 in + 搜索内容:以内容搜索文件 tag + 颜色:按照文件的 tag 搜索

剪贴板

将快捷键设置成 option + C 打开剪贴板 使用 clear 命令能删除剪贴板里的所有内容 可以给文本、图片、文件列表设置不同的过期时间 在高级选项中可以设置忽略某些 App 的内容,比如苹果的密码串 KeyChain

代码片段

用来分类整理代码片段,比如查看端口号占用进程 也可以将需要经常使用的信息,比如报销信息,快递地址加入其中 还可以使用官方提供的一些包,比如 Mac 的按键

有一个常用的场景是使用 Alfred 搜索。Alfred 内置了非常多的搜索引擎。我们也可以通过自定义的方式加上一些,比如程序员常用的 Stack Overflow 和 GitHub,还有国内使用率最高的百度。可以通过下图方式添加搜索引擎。

其中,在 3 处需要输入的内容可以通过打开对应网站,输入关键字点击搜索获得对应的网址,然后将网址中搜索的关键字部分改为 {query} 即可。

Alfred 还有一些字典,计算器等功能,在此就不多赘述,需要的小伙伴可以自行探索。

Selenium 爬虫

日常每天会写一道算法题,需要将算法题目描述和代码从网站上复制粘贴下来。想着通过已经打开并且完成代码编写的浏览器页面的获取,找到了 Selenium 框架。

Selenium 是一个通过使用 WebDriver API 模拟人操作浏览器的网页实现自动化功能的框架,支持多种语言。我们可以使用 Selenium 来打开浏览器页面,点击选取浏览器上的元素,滚动页面,甚至还可以执行 javascript 脚本。下面以 Python 语言为例介绍使用 Selenium。

首先通过 pip 或者 IDE 等工具安装 Selenium,现在最新的版本为 4.6.0。然后需要将浏览器所在路径加入 PATH 中:

代码语言:javascript
复制
echo 'export PATH=$PATH:/path/to/driver' >> ~/.bash_profile
source ~/.bash_profile

新版本的 Selenium 不需要安装驱动(driver)即可使用。安装完成之后编写并运行以下代码检查是否安装成功。

代码语言:javascript
复制
from selenium import webdriver
browser = webdriver.Edge()
driver.get(r'https://www.baidu.com')

如果一切正常,Selenium 会打开一个新的浏览器并打开百度的页面。在这里由于我们需要控制一个已经打开的浏览器,所以可以使用开发者模式打开一个浏览器页面。打开 Terminal,并输入以下代码,会通过端口 9222 打开一个浏览器。

代码语言:javascript
复制
/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --remote-debugging-port=9222 

这样我们就可以使用 Selenium 来控制这个浏览器。只需要在初始化的时候加入 option 参数即可。

代码语言:javascript
复制
options = webdriver.EdgeOptions()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
browser = webdriver.Edge(options=options)

这样我们就控制了一个浏览器,可以通过 Selenium 来模拟人的操作获取需要的各种信息。下面介绍一些常用的操作:

定位元素

通过在浏览器按下快捷键 command + shift + C 来定位一个元素,找到元素之后右键选择 Copy Xpath 即可复制元素对应的路径。也可以使用别的元素属性,只要能唯一定位元素即可。

代码语言:javascript
复制
from selenium.webdriver.common.by import By

element = driver.find_element(By.CLASS_NAME, "class_name")
element = driver.find_element(By.ID, "id")
element = fruits.find_element(By.CLASS_NAME, "sub_element")
element = driver.find_element(By.CSS_SELECTOR, "#css_class")
elements = driver.find_elements(By.TAG_NAME, "tag_name")
elements = question.find_elements(By.XPATH, ".//p | .//pre | .//ul | .//img")

操作元素

代码语言:javascript
复制
element.click() # 点击
element.send_keys("selenium") # 模拟按键输入
element.clear() # 模拟清除输入

等待页面加载

有时候需要等待元素显示或者可点击时才能进行下一步操作。

代码语言:javascript
复制
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# 显式等待
program_list = WebDriverWait(browser, 5, 0.5).until(EC.presence_of_element_located((By.XPATH, 'xpath')))
# 隐式等待
browser.implicitly_wait(10)
# 检查元素是否可见
element.is_displayed()
# 检查元素是否可以操作
element.is_enables()

模拟按键

代码语言:javascript
复制
from selenium.webdriver.common.keys import Keys

# 删除
element.send_keys(Keys.BACK_SPACE)
# 回车
element.send_keys(Keys.ENTER)
# 全选
element.send_keys(Keys.COMMAND, 'a')
# 复制
element.send_keys(Keys.COMMAND, 'c')

执行 javascript 代码

代码语言:javascript
复制
# 执行 js 代码,将页面滚动到能看见 target 元素的位置
browser.execute_script("arguments[0].scrollIntoView();", target)

使用上述操作,基本上可以模拟人操作浏览器。需要获取相关脚本文件的可以点击阅读原文获取源代码链接。

Workflow

Workflow 既是 Alfred 的付费功能也是核心功能,有点类似【快捷指令】。通过编写可视化的组件,理论上可以进行所有有关 Mac 的操作。许多工作中需要重复的指令都可以通过 Workflow 做到简化。比如可以通过 HTTP Status Codes 快速查询对应响应码的含义。

这里简单地搭建了一个生成 markdown 的 Workflow。点击 Workflow 并选择新建一个 Workflow(Create a new Workflow)。

输入 Workflow 的名字,Bundle Id 使用域名的倒序,类似 Java 包路径的命名,然后填入作者的名字,点击保存即可。

在 Workflow 的编辑页面,使用 Hotkey 来触发(Trigger),快捷键设置为 option + L,后面接着的是一个 Terminal,里面可以使用以下代码来执行 Python 脚本。

代码语言:javascript
复制
python3 /path/to/leetcode_maker.py

为了使终端执行完能够自动退出,设置了一个延迟触发,将在 10 秒之后输入 command + W 关闭打开的 Terminal。

这样一个简单的 Workflow 就完成了。以后就可以专注在页面上写代码,只需要按下 option + L 就能将代码的题目和已经写好的代码抓取下来,非常方便。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 air的代码小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档