from selenium import webdriver
from chaojiying import Chaojiying_Client
import time
from lxml import etree
from urllib.request import urlretrieve
import requests
# 1、把验证码图片下载下来
# 2、交给打码平台进行打码
# 在请求的时候自动保存cookie
seession = requests.Session()
def get_img(url):
"""
下载验证码图片
:return:
"""
# 打开浏览器
driver = webdriver.Chrome()
# 自动输入网址
time.sleep(5)
# 打开指定的url地址
driver.get(url)
# selenium 智能等待方式:显性等待 隐性等待 30
time.sleep(2)
# 获取网站内的html源码
res = driver.page_source
# 进行数据转换 注意:res就是页面html源码 不是对象 所以不用再调用text方法
html = etree.HTML(res)
# xpath匹配验证码图片 xpath返回的是一个列表
img_code = html.xpath('//img[@id="verifyimg"]/@src')[0]
# print(img_code)
# 下载验证码图片 第一个参数应该是一个字符串
urlretrieve(img_code,"code.jpg")
def get_code():
"""
处理验证码
:return:
"""
chaojiying2 = Chaojiying_Client('ipython', 'qq6218346', '4004') # 用户中心>>软件ID 生成一个替换 96001
im = open("code.jpg", 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
code = chaojiying2.PostPic(im, 1902)
return code["pic_str"]
def login(url,new_url,headers,code):
"""
登陆个人中心
:return:
"""
data = {
"next":"",
"kf5_return_to":"",
"username":"18632229371",
"passwd": "qq123456",
"code": code
}
# 当我们请求url这个地址的时候 会生成一个cookie
# 所以当我们在请求的时候要顺便把cookie保存下来
seession.post(url=url,data=data,headers=headers)
# 带着cookie去请求个人中心
response = seession.get(url=new_url,headers=headers)
res = response.text
return res
if __name__ == '__main__':
url = "https://www.kuaidaili.com/login/"
new_url = "https://www.kuaidaili.com/usercenter/"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}
get_img(url)
time.sleep(5)
# code 就是我们解析出来的验证码内容
code = get_code()
time.sleep(3)
html = login(url=url,new_url=new_url,headers=headers,code=code)
with open("daili.html","w",encoding="utf-8") as f:
f.write(html)