我不是为云打码打广告, 只是他确实好使
[Python] 纯文本查看 复制代码 """
验证码:
(1)url不变,图片不变--爬取url地址识别,填入
(2)url不变, 图片改变
·判断原理: 在返回验证码的同时生成cookies, 利用cookies和验证码进行识别。
·解决方式:
(1)获取验证码url;
(2)请求验证码地址, 获得验证码和cookies。
(3)识别验证码, 用(2)获得的cookies进行登录。
注:(2)条件下 验证码与cookies是对应的
ps:
request和selenium的cookies形式不同。
"""
# 针对url不变, 内容改变的爬虫
from selenium import webdriver
import requests
import yun_code
driver = webdriver.Chrome()
driver.get("https://passport2.chaoxing.com/login?fid=11135&refer=http://i.mooc.chaoxing.com")
# 1、获取验证码url, 返回图片内容和cookies
img = driver.find_element_by_id("numVerCode").get_attribute("src")
# 打印 driver 生成的 cookies
print( driver.get_cookies() )
# 2、请求验证码url
ans = requests.get( img )
# 3、答应验证码cookies
print(ans.cookies )
# 4、requests cookies转化为selenium cookies
ans_cookies= []
for item in ans.cookies:
ans_cookies.append( {'name':item.name , 'value': item.value} )
# 5、将验证码写到jpg里
with open(b"file/011.jpg", "wb") as f:
f.write( ans.content )
# 6、利用云打码获取验证码
code = yun_code.yun.get_code( 1004,b'file/011.jpg')
print(code )
driver.find_element_by_id("unameId").send_keys("username")
driver.find_element_by_id("passwordId").send_keys("password")
# 7、填写验证码
driver.find_element_by_id("numcode").send_keys(bytes.decode(code[1]) )
# 8、将验证码cookies添加到driver
for item in ans_cookies:
driver.add_cookie( item )
# 9、登录
driver.find_element_by_xpath("//*[@id='form']/table/tbody/tr[7]/td[2]/label/input").click()
|