启用 ohmyzsh 的插件 web-search,可以在终端下使用 bing, google, baidu 来打开浏浏器然后搜索东西,但是不够好用。
于是写了个脚本,实现在多个搜索引擎下搜索相同关键词。
无论是在终端下搜索还是在运行窗口下搜索,都会打开新的浏览器窗口,所有页面都在同一窗口下,且整个过程不需要用鼠标。
cygwin shell
文件:~/bin/s
# open chrome in new window,不跟网址时打开的窗口出提示选择 gogole 帐号(多帐号)
chrome --args --new-window https://google.com/search?q="$1"
# search.pi,自建搜索
chrome http://search.pi/query/?q="$1"
# duckduckgo
chrome https://duckduckgo.com/?q="$1"
# bing
chrome https://bing.com/search?q="$1"
# baidu
chrome https://baidu.com/s?wd="$1"
后续打开操作不需要加延时.
~/bin % s test
Opening in existing browser session.
其中 chrome 命令是软链接 chrome.exe
% file ~/bin/chrome
/home/god/bin/chrome: symbolic link to /cygdrive/c/Program Files/Google/Chrome/Application/chrome.exe
举例: s test
,使用 atl+f4 可以关闭整个窗口。
python 脚本实现
#!/usr/bin/python3.9
import os
import sys
args = sys.argv[1:] # 参数是以空格分隔的
# 搜索词
content = '%20'.join(args) # 合为一个字符串时,以空格分隔
chrome = r'"C:\Program Files\Google\Chrome\Application\chrome.exe"'
os.system(f'{chrome} --args --new-window https://google.com/search?q={content}')
os.system(f'{chrome} http://search.pi/query/?q={content}')
os.system(f'{chrome} https://duckduckgo.com/?q={content}')
os.system(f'{chrome} https://bing.com/search?q={content}')
os.system(f'{chrome} https://www.baidu.com/s?wd={content}')
os.system(f'{chrome} https://kagi.com/search?q={content}')
上面脚本是没问题的,但可能会有两个错误:
- chrome 必须用
r'"C:\Pro..."'
双重引号加r
,不然编译后运行时报错,直接运行不报。 - content 不能加 “”,不然会报错。
os.system(f'{chrome} http://search.pi/query/?q="{content}"')
Summary
>>> import os
>>> cmd2 = '"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --new-window https://baidu.com/s?wd="a%20b%20c"'
>>> os.system(cmd2)
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
1
# wd 后面的参数不加双引号就正常了,但是下面这个在编译后运行时报错,必须给 cmd2 后面的字符串加上 r'"C:\Pro......"' 再次编译运行才正常
>>> cmd2 = '"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --new-window https://baidu.com/s?wd=a%20b%20c'
>>> os.system(cmd2)
0
>>>
下面这个脚本有错误,但是在 zsh 下可以正常运行,编译也通过,编译后的 exe 也能在 cygwin shell 下运行,但换到 cmd 下就不行。
#!/usr/bin/python3.9
import os
import sys
args = sys.argv[1:] # 参数是以空格分隔的
content = ' '.join(args) # 合为一个字符串时,以空格分隔
os.system(f'brave --args --new-window https://google.com/search?q="{content}"')
os.system(f'brave http://search.pi/query/?q="{content}"')
os.system(f'brave https://duckduckgo.com/?q="{content}"')
os.system(f'brave https://bing.com/search?q="{content}"')
os.system(f'brave https://www.baidu.com/s?wd="{content}"')
os.system(f'brave https://kagi.com/search?q="{content}"')
不知道为什么,问题已发到:
求解。
运行窗口
在运行窗口实现搜索:
文件:s.bat
,放到某个环境变量目录下。
REM open chrome in new window
call "cmd /c start chrome --args --new-window https://google.com/search?q=%1"
REM 延时 1 秒,确保后面的页面都在同一窗口内打开。
ping -n 1 127.0.0.1>nul
REM search.pi
start chrome http://search.pi/query/?q=%1
REM duckduckgo
start chrome https://duckduckgo.com/?q=%1
REM bing
start chrome https://bing.com/search?q=%1
REM baidu
start chrome https://baidu.com/s?wd=%1
REM pause
有空格时使用双引号括起来:
一键清空 run 历史记录
run 运行多了就会有很多历史记录,不好清除。
下面是清空 run 记录的 python 脚本。
clear.py
from winreg import *
# 1. 连接注册表根键
regRoot = ConnectRegistry(None, HKEY_CURRENT_USER)
subDir = r'Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU'
# 2. 获取指定目录下所有键的控制
keyHandle = OpenKey(regRoot, subDir, access=KEY_ALL_ACCESS)
# 3. 存放所有的键名
lis = []
try:
count = 0
while True:
name, value, _type = EnumValue(keyHandle, count)
print(name, value, _type)
lis.append(name)
# 不能在这里删除,因为删除后,列表中的数量就变化了,下一轮执行 EnumValue(keyHandle, count) 时就有问题
# DeleteValue(keyHandle, k)
count += 1
except Exception as err:
print(err)
# 4. 删除键
for k in lis: DeleteValue(keyHandle, k)
# 5. 关闭
CloseKey(keyHandle)
CloseKey(regRoot)
打包为 clear.exe (pyinstaller -F clear.py
,clear.exe 在 dist 目录下)并放入某个环境变量的目录下,然后就可以运行 clear
来清空 run 历史。