如何让Python 3.x在网页浏览器中输入文本

4 投票
2 回答
7737 浏览
提问于 2025-04-16 19:04

假设我想打开谷歌,然后自动在搜索框里输入文字并按下回车,而且这一切都不需要用户干预,我该怎么做呢?

补充一下:虽然我确实需要指定一个特定的网址,但我希望Python能够在任何网址上输入文字。这就是为什么我需要它能够在谷歌的搜索框里输入文字,而不仅仅是打开搜索谷歌时出现的网址。

2 个回答

0

最好的开源项目是 mechanize

这里有一个和你说的类似的例子:

import mechanize

mech = mechanize.Browser()

try:
    mech.open("http://www.google.com/")
except HTTPError, e:
    sys.exit("%d: %s" % (e.code, e.msg))

# Select the form, fill the fields, and submit
mech.select_form(nr=0)
mech["query"] = "Lester"
try:
    mech.submit()
except HTTPError, e:
    sys.exit("post failed: %d: %s" % (e.code, e.msg))

你可以查看源码下载中的示例文件夹,这样可以更全面地了解这个API。它写得非常好。

3

如果我理解得没错,你其实是想“控制”一个特定的浏览器,也就是说,打开一个浏览器窗口并直接访问某个网址,而不是让程序去解析网页内容。

在这种情况下,你可以看看 subprocess 这个模块,使用它你可以运行一个外部程序(比如“firefox”),然后查看浏览器的命令行说明,了解如何让它指向特定的网址。以firefox为例,你只需要把网址作为第一个参数传递进去。所以你可以用类似这样的代码:

from subprocess import Popen
...
Popen(["firefox", "this.is.my.url.com"], ...)

更具体来说,如果你想在firefox中打开“this is my query”这个查询字符串的谷歌搜索结果,你可以用类似这样的代码:

Popen(["firefox", "http://www.google.com/#q=this+is+my+query"])

补充:如果你想先启动浏览器,然后再和浏览器窗口进行互动,或许你应该看看桌面自动化或消息传递框架,比如 dbus。我不太确定具体怎么做,但应该可以让你聚焦到浏览器窗口,选择特定的输入框,并在里面输入一些文字。

撰写回答