Python在网页上点击按钮(后端)

1 投票
1 回答
2432 浏览
提问于 2025-04-18 06:37

我正在用Python模拟登录公司的邮箱。

这个脚本运行得很好,结果页面显示已经登录的标志。

import urllib
import urllib2
import mechanize
import cookielib

br = mechanize.Browser()

cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

br.addheaders = [('User-agent', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)')]

url = 'http://www.company.com/'
form_data = {'name_file': 'THENAME', 'password_field': 'THEPASSWORD'}
params = urllib.urlencode(form_data)
response = br.open(url, params)

不过,我需要点击网页上的“进入邮箱”按钮,才能进入邮箱的管理界面。值得注意的是,点击这个按钮后,网页地址并没有变化,也没有跳转到其他页面。

下面是这个HTML脚本。我觉得这应该是一个按钮。

id=mail1_btnGoto class=btn onmouseover="this.className='btnOver'" onmouseout="this.className='btn'" name=mail1$btnGoto value="GoTo Email" type=submit>

我考虑过用winapi来模拟鼠标点击,但这样做有点傻,因为它只是在前端控制鼠标。Selenium在这种情况下也不合适,因为我想让脚本在后台运行。

那我该如何在网页上“点击”这个按钮呢?

1 个回答

1

看起来这个邮件仪表盘是由JavaScript驱动的,所以你不能仅仅用winapi来模拟mouseclick,而不去执行脚本。

一般来说,有两种解决方法:

  1. 使用功能齐全的浏览器驱动。正如你提到的,selenium在很多编程语言中都是一个不错的选择。webdriver不需要手动打开浏览器,可以完全通过脚本来控制。你也可以试试ghost driver。它使用PhantomJS,并且应该在后台服务器上运行。(但需要先安装phantomjs)

  2. 模拟请求。因为登录通常会发起一个http/https请求。你可以用python来模拟这个请求。你可以使用http调试工具,比如fiddlerwireshark或者Chrome网页检查器来捕捉浏览器发送给认证服务器的信息。

我尽量具体和详细。但由于网络爬虫的多样性,逐步的指导超出了我的能力范围。

撰写回答