1.获取验证码动态匹配码。我们可以定义一个get_si_code()函数,它会进入注册页面,从HTML代码中用re.search方法获取si_code_reg的值,最后返回这个值。
def get_si_code():
# si_code是一个动态变化的参数
index_url = 'http://www.santostang.com/wp-login.php? action=register'
# 获取注册时需要用到的si_code
index_page = session.get(index_url, headers=headers)
html = index_page.text
pattern = r'name="si_code_reg" type="hidden" value="(.*? )"'
# 这里用re.search方法找到si_code
si_code = re.search(pattern, html).group(1)
return si_code
2.输入相应的匹配码。我们定义了get_captcha ()函数,它会使用get方法获取那张si_code的验证码图片,并存储至源代码所在的地址。在这之后,如果安装了Pillow库,就会使用open()将验证码图片打开;如果没有安装Pillow,就需要手动找到并打开这张图片,之后输入图片中的验证码。
Pillow可以使用pip安装:pip install pillow。
def get_captcha(si_code):
captcha_url = "http://www.santostang.com/wp-content/plugins/si-captcha-for- wordpress/captcha/securimage_show.php? si_sm_captcha=1&si_form_id=reg" + si_code
r = session.get(captcha_url, headers=headers)
with open('captcha.jpg', 'wb') as f:
f.write(r.content)
f.close()
try:
im = Image.open('captcha.jpg')
im.show()
im.close()
except:
print(u’请到 %s目录找到captcha.jpg手动输入’ % os.path.abspath('captcha.jpg'))
captcha = input("please input the captcha\n>")
return captcha
3.准备注册上交的表单。使用register函数将表单中的数据准备好,加上验证码一起,提交POST请求,并进行注册。若输出打印结果为200,则表示注册成功。
def register(account, email, si_code):
post_url = 'http://www.santostang.com/wp-login.php? action=register'
postdata = {
'user_login': account,
'user_email': email,
'si_code_reg': si_code,
'redirect_to': '',
}
# 调用get_captcha函数获取验证码数字
postdata["captcha"] = get_captcha(si_code)
# 提交POST请求,进行注册
register_page = session.post(post_url, data=postdata, headers=headers)
# 若输出打印结果为200,则表示注册成功
print(register_page.status_code)
4.输入用户和邮箱,调用前面3个步骤写好的函数来执行程序。
import requests
import re
import os
from PIL import Image
if __name__ == '__main__':
agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
headers = {
"Host": "www.santostang.com",
"Origin":"http://www.santostang.com",
"Referer":"http://www.santostang.com/wp-login.php",
'User-Agent': agent
}
session = requests.session()
#获取我们需要的验证码匹配码
si_code = get_si_code()
# 调用注册函数进行注册
account = '18341432113'
email = 'a12345@qq.com'
register(account, email, si_code)
在程序运行的时候需要手动输入验证码。如果安装了Pillow,就会直接打开验证码图片,这时在输入框中输入图片上的字母,按回车键之后,如果出现200,就表示注册成功。