python mechanize当下模拟浏览器的顶流

mechanize 是一个Python库,它模拟了一个网页浏览器,可以用来自动化与网站的交互,如填写表单、跟随链接、处理cookies等。尽管它在过去被广泛用于网页爬虫和自动化测试,但需要注意的是,随着网站技术的发展,特别是动态内容和复杂JavaScript交互的增多,mechanize可能无法处理所有现代网站的功能,因为它不支持执行JavaScript。

基本用途包括:

自动化表单提交:可以填写和提交网页上的表单,这对于测试网站的表单功能特别有用。

点击链接:可以遍历页面上的链接并模拟点击,自动导航到下一个页面。

管理Cookies:自动处理cookies,就像浏览器一样,这对于需要保持会话状态的网站很重要。

处理重定向:能自动处理HTTP重定向。

自定义头部:可以设置HTTP请求头,比如User-Agent,模拟不同的浏览器或环境。

示例代码:

 

import mechanize

# 创建一个Browser对象

br = mechanize.Browser()

# 设置浏览器的一些属性

br.set_handle_robots(False) # 不遵守robots.txt规则

br.addheaders = [('User-agent', 'Mozilla/5.0')] # 设置User-Agent

# 访问一个网页

response = br.open("http://example.com")

# 选择一个表单并填写数据

for form in br.forms():

if form.attrs.get('id') == 'some_form_id': # 假设表单有一个id为'some_form_id'

br.select_form(nr=0) # 或者使用索引选择表单

br.form['username'] = 'your_username' # 填写用户名

br.form['password'] = 'your_password' # 填写密码

break

# 提交表单

response = br.submit()

# 打印响应内容

print(response.read())

尽管mechanize在处理静态网页方面很有用,但对于高度动态的网站和复杂的前端交互,可能需要结合或转向使用像Selenium这样的工具,它能够驱动真实浏览器,支持JavaScript执行。

在自动化测试中,mechanize可以应用于多种场景,尽管它的能力有限,尤其是在处理JavaScript交互方面,但它依然适合于一些基础的Web自动化任务。以下是五个自动化测试场景及示例代码概述:

1. 登录功能测试

场景:验证网站的登录功能是否正常,包括正确和错误的用户名密码组合。

示例代码:

 

import mechanize

br = mechanize.Browser()

br.open("http://yourwebsite.com/login")

br.select_form(nr=0) # 假设登录表单是第一个表单

br["username"] = "testuser"

br["password"] = "correctpassword"

response = br.submit()

if "Welcome, testuser!" in response.get_data(): # 假设登录成功会有欢迎信息

print("登录成功")

else:

print("登录失败")

# 测试错误的凭据

br.open("http://yourwebsite.com/login")

br.select_form(nr=0)

br["username"] = "testuser"

br["password"] = "wrongpassword"

response = br.submit()

if "Invalid credentials" in response.get_data(): # 假设错误信息包含"Invalid credentials"

print("错误凭据测试通过")

else:

print("错误凭据测试失败")

2. 链接有效性检查

场景:遍历网站上的所有外部链接,检查它们是否有效(HTTP状态码200)。

示例代码:


import mechanize

def check_links_on_page(url):

br = mechanize.Browser()

br.follow_redirects = True

br.open(url)

for link in br.links():

if link.url.startswith("http"): # 只检查外部链接

try:

response = br.open(link.url)

if response.code != 200:

print(f"Link {link.url} is broken, status code: {response.code}")

except mechanize.HTTPError as e:

print(f"Error accessing {link.url}: {e}")

check_links_on_page("http://yourwebsite.com")

3. 表单提交测试

场景:测试不同表单提交情况,比如注册表单、联系表单等。

示例代码:


# 假设测试一个联系表单提交

br = mechanize.Browser()

br.open("http://yourwebsite.com/contact")

br.select_form(nr=0)

br["name"] = "Test User"

br["email"] = "test@example.com"

br["message"] = "This is a test message."

response = br.submit()

if "Thank you for your message" in response.get_data(): # 假设成功提交会有感谢信息

print("表单提交成功")

else:

print("表单提交失败")

4. Cookie处理测试

场景:验证网站的cookie设置和管理是否正确。

示例代码:


br = mechanize.Browser()

br.open("http://yourwebsite.com/setcookie")

# 假设访问此页面会设置cookie

print("Initial cookies:", br.cookiejar)

br.open("http://yourwebsite.com/cookiepage") # 假设此页面读取并显示cookie

response_text = response.read()

if "Cookie value here" in response_text: # 替换为实际cookie值的检查

print("Cookie handling test passed")

else:

print("Cookie handling test failed")

5. 重定向测试

场景:确保特定操作(如登录、提交表单)后的重定向行为符合预期。

示例代码:


br = mechanize.Browser()

br.open("http://yourwebsite.com/login")

br.select_form(nr=0)

br["username"] = "testuser"

br["password"] = "correctpassword"

response = br.submit()

final_url = response.geturl()

expected_url = "http://yourwebsite.com/dashboard" # 登录后预期的URL

if final_url == expected_url:

print("Redirect after login test passed")

else:

print(f"Redirect test failed. Expected: {expected_url}, got: {final_url}")

请根据具体网站结构和测试需求调整示例代码。记住,mechanize不适合处理复杂的JavaScript交互,对于这类场景,考虑使用Selenium等工具。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值