返回介绍

11.1 项目:利用 webbrowser 模块的 mapIt.py

发布于 2024-01-22 21:44:06 字数 3768 浏览 0 评论 0 收藏 0

webbrowser模块的open()函数可以启动一个新浏览器,打开指定的URL。在交互式环境中输入以下代码:

>>> import webbrowser
>>> webbrowser.open('http://inventwithpython.com/')

Web浏览器的选项卡将打开URL http://inventwithpython.com/。这大概就是webbrowser模块能做的唯一的事情。既使如此,open()函数确实让一些有趣的事情成为可能。例如,将一条街道的地址拷贝到剪贴板,并在Google地图上打开它的地图,这是很繁琐的事。你可以让这个任务减少几步,写一个简单的脚本,利用剪贴板中的内容在浏览器中自动加载地图。这样,你只要将地址拷贝到剪贴板,运行该脚本,地图就会加载。

你的程序需要做到:

· 从命令行参数或剪贴板中取得街道地址。

· 打开Web浏览器,指向该地址的Google地图页面。

这意味着代码需要做下列事情:

· 从sys.argv读取命令行参数。

· 读取剪贴板内容。

· 调用webbrowser.open()函数打开外部浏览器。

打开一个新的文件编辑器窗口,将它保存为mapIt.py。

第1步:弄清楚URL

根据附录B中的指导,建立mapIt.py,这样当你从命令行运行它时,例如

C:\> mapit 870 Valencia St, San Francisco, CA 94110

该脚本将使用命令行参数,而不是剪贴板。如果没有命令行参数,程序就知道要使用剪贴板的内容。

首先你需要弄清楚,对于指定的街道地址,要使用怎样的URL。你在浏览器中打开http://maps.google.com/并查找一个地址时,地址栏中的URL看起来就像这样:https:// www.google.com/maps/place/870+Valencia+St/@37.7590311,-122.4215096, 17z/data=
!3m1!4b1!4m2!3m1!1s0x808f7e3dadc07a37:0xc86b0b2bb93b73d8.

地址就在URL中,但其中还有许多附加的文本。网站常常在URL中添加额外的数据,帮助追踪访问者或定制网站。但如果你尝试使用https://www.google. com/maps/place/870+Valencia+St+San+Francisco+CA/,会发现仍然可以到达正确的页面。所以你的程序可以设置为打开一个浏览器,访问'https://www.google.com/ maps/place/your_address_string'(其中your_address_string是想查看地图的地址)。

第2步:处理命令行参数

让你的代码看起来像这样:

#! python3
# mapIt.py - Launches a map in the browser using an address from the
# command line or clipboard.

import webbrowser, sys
if len(sys.argv) > 1:
    # Get address from command line.
    address = ' '.join(sys.argv[1:])

# TODO: Get address from clipboard.

在程序的#!行之后,需要导入webbrowser模块,用于加载浏览器;导入sys模块,用于读入可能的命令行参数。sys.argv变量保存了程序的文件名和命令行参数的列表。如果这个列表中不只有文件名,那么len(sys.argv)的返回值就会大于1,这意味着确实提供了命令行参数。

命令行参数通常用空格分隔,但在这个例子中,你希望将所有参数解释为一个字符串。因为sys.argv是字符串的列表,所以你可以将它传递给join()方法,这将返回一个字符串。你不希望程序的名称出现在这个字符串中,所以不是使用sys.argv,而是使用sys.argv[1:],砍掉这个数组的第一个元素。这个表达式求值得到的字符串,保存在address变量中。

如果运行程序时在命令行中输入以下内容:

mapit 870 Valencia St, San Francisco, CA 94110

…sys.argv变量将包含这样的列表值:

 ['mapIt.py', '870', 'Valencia', 'St, ', 'San', 'Francisco, ', 'CA', '94110']

address变量将包含字符串'870 Valencia St, San Francisco, CA 94110'。

第3步:处理剪贴板内容,加载浏览器

让你的代码看起来像这样:

#! python3
# mapIt.py - Launches a map in the browser using an address from the
# command line or clipboard.

import webbrowser, sys, pyperclip
if len(sys.argv) > 1:
    # Get address from command line.
    address = ' '.join(sys.argv[1:])
else:
    # Get address from clipboard.
    address = pyperclip.paste()

webbrowser.open('https://www.google.com/maps/place/' + address)

如果没有命令行参数,程序将假定地址保存在剪贴板中。可以用pyperclip.paste()取得剪贴板的内容,并将它保存在名为address的变量中。最后,启动外部浏览器访问Google地图的URL,调用webbrowser.open()。

虽然你写的某些程序将完成大型任务,为你节省数小时的时间,但使用一个程序,在每次执行一个常用任务时节省几秒钟时间,比如取得一个地址的地图,这同样令人满意。表11-1比较了有mapIt.py和没有它时,显示地图所需的步骤。

表11-1 不用和利用mapIt.py取得地图

手工取得地图

利用mapIt.py

高亮标记地址

高亮标记地址

拷贝地址

拷贝地址

打开Web浏览器

运行mapIt.py

打开http://maps.google.com/

点击地址文本字段

拷贝地址

按回车

看到程序让这个任务变得不那么繁琐了吗?

第4步:类似程序的想法

只要你有一个URL,webbrowser模块就让用户不必打开浏览器,而直接加载一个网站。其他程序可以利用这项功能完成以下任务:

· 在独立的浏览器标签中,打开一个页面中的所有链接。

· 用浏览器打开本地天气的URL。

· 打开你经常查看的几个社交网站。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文