如何让Python 3.x在网页浏览器中输入文本
假设我想打开谷歌,然后自动在搜索框里输入文字并按下回车,而且这一切都不需要用户干预,我该怎么做呢?
补充一下:虽然我确实需要指定一个特定的网址,但我希望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。我不太确定具体怎么做,但应该可以让你聚焦到浏览器窗口,选择特定的输入框,并在里面输入一些文字。