当前位置: 首页 > news >正文

盗版小说网站建设wordpress博文图片

盗版小说网站建设,wordpress博文图片,电商网页设计的主要内容,中国网络安全厂商排名登陆时间#xff1a;2019-10-21实现难度#xff1a;★★★☆☆☆请求链接#xff1a;https://kyfw.12306.cn/otn/resources/login.html实现目标#xff1a;模拟登陆中国铁路12306#xff0c;攻克点触验证码涉及知识#xff1a;点触验证码的攻克、自动化测试工具 Selenium… 登陆时间2019-10-21实现难度★★★☆☆☆请求链接https://kyfw.12306.cn/otn/resources/login.html实现目标模拟登陆中国铁路12306攻克点触验证码涉及知识点触验证码的攻克、自动化测试工具 Selenium 的使用、对接在线打码平台完整代码https://github.com/TRHX/Python3-Spider-Practice/tree/master/AutomationTool/12306-login其他爬虫实战代码合集持续更新https://github.com/TRHX/Python3-Spider-Practice爬虫实战专栏持续更新https://itrhx.blog.csdn.net/article/category/9351278 文章目录【1x00】思维导图【2x00】打码平台选择【3x00】初始化模块【3x01】初始化函数【3x02】账号密码输入函数【4x00】验证码处理模块【4x01】验证码图片剪裁函数【4x02】验证码坐标解析函数【4x03】模拟点击验证码函数【5x00】登录模块【6x00】完整代码【6x01】12306.py【6x02】chaojiying.py【7x00】效果实现动图【1x00】思维导图 利用自动化测试工具 Selenium 直接模拟人的行为方式来完成验证 发送请求出现验证码后剪裁并保存验证码图片 选择在线打码平台获取其API以字节流格式发送图片 打码平台人工识别验证码返回验证码的坐标信息 解析返回的坐标信息模拟点击验证码完成验证后点击登陆 【2x00】打码平台选择 关于打码平台在线打码平台全部都是人工在线识别准确率非常高原理就是先将验证码图片提交给平台平台会返回识别结果在图片中的坐标位置然后我们再解析坐标模拟点击即可常见的打码平台有超级鹰、云打码等打码平台是收费的拿超级鹰来说1元 1000题分识别一次验证码将花费一定的题分不同类型验证码需要的题分不同验证码越复杂所需题分越高比如 7 位中文汉字需要 70 题分常见 4 ~ 6 位英文数字只要 10 题分其他打码平台价格也都差不多本次实战使用超级鹰打码平台 使用打码平台在超级鹰打码平台注册账号官网http://www.chaojiying.com/ 充值一块钱得到 1000 题分在用户中心里面申请一个软件 ID 在价格体系里面确定验证码的类型先观察 12306 官网发现验证码是要我们点击所有满足条件的图片一般有 1 至 4 张图片满足要求由此可确定在超级鹰打码平台的验证码类型为 9004坐标多选,返回1~4个坐标,如:x1,y1|x2,y2|x3,y3 然后在开发文档里面获取其 Python API下载下来以备后用 【3x00】初始化模块 【3x01】初始化函数 # 12306账号密码 USERNAME 155******** PASSWORD ***********# 超级鹰打码平台账号密码 CHAOJIYING_USERNAME ******* CHAOJIYING_PASSWORD *******# 超级鹰打码平台软件ID CHAOJIYING_SOFT_ID ******** # 验证码类型 CHAOJIYING_KIND 9004class CrackTouClick():def __init__(self):self.url https://kyfw.12306.cn/otn/resources/login.html# path是谷歌浏览器驱动的目录如果已经将目录添加到系统变量则不用设置此路径path rF:\PycharmProjects\Python3爬虫\chromedriver.exechrome_options Options()chrome_options.add_argument(--start-maximized)self.browser webdriver.Chrome(executable_pathpath, chrome_optionschrome_options)self.wait WebDriverWait(self.browser, 20)self.username USERNAMEself.password PASSWORDself.chaojiying ChaojiyingClient(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID) 定义 12306 账号USERNAME、密码PASSWORD、超级鹰用户名CHAOJIYING_USERNAME、超级鹰登录密码CHAOJIYING_PASSWORD、超级鹰软件 IDCHAOJIYING_SOFT_ID、验证码类型CHAOJIYING_KIND登录页面 url 谷歌浏览器驱动的目录path浏览器启动参数等将超级鹰账号密码等相关参数传递给超级鹰 API 【3x02】账号密码输入函数 def get_input_element(self):# 登录页面发送请求self.browser.get(self.url)# 登录页面默认是扫码登录所以首先要点击账号登录login self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, .login-hd-account)))login.click()time.sleep(3)# 查找到账号密码输入位置的元素username self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, input#J-userName)))password self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, input#J-password)))# 输入账号密码username.send_keys(self.username)password.send_keys(self.password) 分析页面可知登陆页面默认出现的是扫描二维码登陆所以要先点击账号登录找到该 CSS 元素为 login-hd-account调用 click() 方法实现模拟点击此时出现账号密码输入框同样找到其 ID 分别为 J-userName 和 J-password调用 send_keys() 方法输入账号密码 【4x00】验证码处理模块 def crack(self):# 调用账号密码输入函数self.get_input_element()# 调用验证码图片剪裁函数image self.get_touclick_image()bytes_array BytesIO()image.save(bytes_array, formatPNG)# 利用超级鹰打码平台的 API PostPic() 方法把图片发送给超级鹰后台发送的图像是字节流格式返回的结果是一个JSONresult self.chaojiying.PostPic(bytes_array.getvalue(), CHAOJIYING_KIND)print(result)# 调用验证码坐标解析函数locations self.get_points(result)# 调用模拟点击验证码函数self.touch_click_words(locations)# 调用模拟点击登录函数self.login()try:# 查找是否出现用户的姓名若出现表示登录成功success self.wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, .welcome-name), 谭先生))print(success)cc self.browser.find_element(By.CSS_SELECTOR, .welcome-name)print(用户 cc.text 登录成功)# 若没有出现表示登录失败继续重试超级鹰会返回本次识别的分值except TimeoutException:self.chaojiying.ReportError(result[pic_id])self.crack() crack() 为验证码处理模块的主函数 调用账号密码输入函数 get_input_element()等待账号密码输入完毕 调用验证码图片剪裁函数 get_touclick_image()得到验证码图片 利用超级鹰打码平台的 API PostPic() 方法把图片发送给超级鹰后台发送的图像是字节流格式返回的结果是一个JSON如果识别成功典型的返回结果类似于 {err_no: 0, err_str: OK, pic_id: 6002001380949200001, pic_str: 132,127|56,77, md5: 1f8e1d4bef8b11484cb1f1f34299865b}其中pic_str 就是识别的文字的坐标是以字符串形式返回的每个坐标都以 | 分隔 调用 get_points() 函数解析超级鹰识别结果 调用 touch_click_words() 函数对符合要求的图片进行点击 调用模拟点击登录函数 login()点击登陆按钮模拟登陆 使用 try-except 语句判断是否出现了用户信息判断依据是是否有用户姓名的出现出现的姓名和实际姓名一致则登录成功如果失败了就重试超级鹰会返回该分值 【4x01】验证码图片剪裁函数 def get_touclick_image(self, name12306.png):# 获取验证码的位置element self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, .login-pwd-code)))time.sleep(3)location element.locationsize element.sizetop, bottom, left, right location[y], location[y] size[height], location[x], location[x] size[width]# 先对整个页面截图screenshot self.browser.get_screenshot_as_png()screenshot Image.open(BytesIO(screenshot))# 根据验证码坐标信息剪裁出验证码图片captcha screenshot.crop((left, top, right, bottom))captcha.save(name)return captcha 首先查找到验证码的坐标信息先对整个页面截图然后根据验证码坐标信息剪裁出验证码图片 location 属性可以返回该图片对象在浏览器中的位置坐标轴是以屏幕左上角为原点x 轴向右递增y 轴向下递增size 属性可以返回该图片对象的高度和宽度由此可以得到验证码的位置信息 【4x02】验证码坐标解析函数 def get_points(self, captcha_result):# 超级鹰识别结果以字符串形式返回每个坐标都以|分隔groups captcha_result.get(pic_str).split(|)# 将坐标信息变成列表的形式locations [[int(number) for number in group.split(,)] for group in groups]return locations get_points() 方法将超级鹰的验证码识别结果变成列表的形式 【4x03】模拟点击验证码函数 def touch_click_words(self, locations):element self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, .login-pwd-code)))# 循环点击正确验证码的坐标for location in locations:print(location)ActionChains(self.browser).move_to_element_with_offset(element, location[0], location[1]).click().perform() 循环提取正确的验证码坐标信息依次点击验证码 【5x00】登录模块 def login(self):submit self.wait.until(EC.element_to_be_clickable((By.ID, J-login)))submit.click()分析页面找到登陆按钮的 ID 为 J-login调用 click() 方法模拟点击按钮实现登录 【6x00】完整代码 【6x01】12306.py # # --*-- coding: utf-8 --*-- # Time : 2019-10-21 # Author : TRHX # Blog : www.itrhx.com # CSDN : https://blog.csdn.net/qq_36759224 # FileName: 12306.py # Software: PyCharm # import time from io import BytesIO from PIL import Image from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from chaojiying import ChaojiyingClient from selenium.common.exceptions import TimeoutException# 12306账号密码 USERNAME 155******** PASSWORD ***********# 超级鹰打码平台账号密码 CHAOJIYING_USERNAME ******** CHAOJIYING_PASSWORD ********# 超级鹰打码平台软件ID CHAOJIYING_SOFT_ID ****** # 验证码类型 CHAOJIYING_KIND 9004class CrackTouClick():def __init__(self):self.url https://kyfw.12306.cn/otn/resources/login.html# path是谷歌浏览器驱动的目录如果已经将目录添加到系统变量则不用设置此路径path rF:\PycharmProjects\Python3爬虫\chromedriver.exechrome_options Options()chrome_options.add_argument(--start-maximized)self.browser webdriver.Chrome(executable_pathpath, chrome_optionschrome_options)self.wait WebDriverWait(self.browser, 20)self.username USERNAMEself.password PASSWORDself.chaojiying ChaojiyingClient(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)def crack(self):# 调用账号密码输入函数self.get_input_element()# 调用验证码图片剪裁函数image self.get_touclick_image()bytes_array BytesIO()image.save(bytes_array, formatPNG)# 利用超级鹰打码平台的 API PostPic() 方法把图片发送给超级鹰后台发送的图像是字节流格式返回的结果是一个JSONresult self.chaojiying.PostPic(bytes_array.getvalue(), CHAOJIYING_KIND)print(result)# 调用验证码坐标解析函数locations self.get_points(result)# 调用模拟点击验证码函数self.touch_click_words(locations)# 调用模拟点击登录函数self.login()try:# 查找是否出现用户的姓名若出现表示登录成功success self.wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, .welcome-name), 谭先生))print(success)cc self.browser.find_element(By.CSS_SELECTOR, .welcome-name)print(用户 cc.text 登录成功)# 若没有出现表示登录失败继续重试超级鹰会返回本次识别的分值except TimeoutException:self.chaojiying.ReportError(result[pic_id])self.crack()# 账号密码输入函数def get_input_element(self):# 登录页面发送请求self.browser.get(self.url)# 登录页面默认是扫码登录所以首先要点击账号登录login self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, .login-hd-account)))login.click()time.sleep(3)# 查找到账号密码输入位置的元素username self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, input#J-userName)))password self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, input#J-password)))# 输入账号密码username.send_keys(self.username)password.send_keys(self.password)# 验证码图片剪裁函数def get_touclick_image(self, name12306.png):# 获取验证码的位置element self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, .login-pwd-code)))time.sleep(3)location element.locationsize element.sizetop, bottom, left, right location[y], location[y] size[height], location[x], location[x] size[width]# 先对整个页面截图screenshot self.browser.get_screenshot_as_png()screenshot Image.open(BytesIO(screenshot))# 根据验证码坐标信息剪裁出验证码图片captcha screenshot.crop((left, top, right, bottom))captcha.save(name)return captcha# 验证码坐标解析函数分析超级鹰返回的坐标def get_points(self, captcha_result):# 超级鹰识别结果以字符串形式返回每个坐标都以|分隔groups captcha_result.get(pic_str).split(|)# 将坐标信息变成列表的形式locations [[int(number) for number in group.split(,)] for group in groups]return locations# 模拟点击验证码函数def touch_click_words(self, locations):element self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, .login-pwd-code)))# 循环点击正确验证码的坐标for location in locations:print(location)ActionChains(self.browser).move_to_element_with_offset(element, location[0], location[1]).click().perform()# 模拟点击登录函数def login(self):submit self.wait.until(EC.element_to_be_clickable((By.ID, J-login)))submit.click()if __name__ __main__:crack CrackTouClick()crack.crack() 【6x02】chaojiying.py import requests from hashlib import md5class ChaojiyingClient(object):def __init__(self, username, password, soft_id):self.username usernamepassword password.encode(utf8)self.password md5(password).hexdigest()self.soft_id soft_idself.base_params {user: self.username,pass2: self.password,softid: self.soft_id,}self.headers {Connection: Keep-Alive,User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0),}def PostPic(self, im, codetype):im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.htmlparams {codetype: codetype,}params.update(self.base_params)files {userfile: (ccc.jpg, im)}r requests.post(http://upload.chaojiying.net/Upload/Processing.php, dataparams, filesfiles, headersself.headers)return r.json()def ReportError(self, im_id):im_id:报错题目的图片IDparams {id: im_id,}params.update(self.base_params)r requests.post(http://upload.chaojiying.net/Upload/ReportError.php, dataparams, headersself.headers)return r.json() 【7x00】效果实现动图 最终实现效果图关键信息已经过打码处理
http://www.zqtcl.cn/news/495631/

相关文章:

  • 哪些网站可以查企业信息大城县有做网站的吗
  • 上海网站建设电影联wordpress 分类title
  • 杭州网站建设招标免费seo排名优化
  • 网站建设服务费是否无形资产百度一下你就知道官网下载安装
  • 网站付款链接怎么做在线设计商标logo
  • 阿里巴巴做网站多少钱特大新闻凌晨刚刚发生
  • 网站如何做se设计师网站pintset
  • 上海网站制作机构wordpress 优酷免广告
  • 关于网站建设的名言网站开发的技术难点
  • 免费云建站廊坊seo外包
  • 个人网站建设方案书用备案的衡水市网站制作
  • 教育网站的建设品牌营销型网站作用
  • 金凤区建设交通局网站做洗衣液的企业网站
  • 南阳网站优化手机咋做网站
  • 做网站多少钱一年没有网站做cpa怎么赚钱
  • 二手房发布网站怎么做建站哪家好用兴田德润
  • 网站开发有几种深圳网站制作长沙
  • 为什么一个网站外链那么多公司团建活动
  • 公司门户网站建设策划书wordpress清空数据
  • 大兴专注高端网站建设交互设计留学
  • 想要黑掉一个网站 要怎么做网页设计师培训机构有吗
  • 做网站网站应该注意什么关于建设网站的会议纪要
  • 什么网站建设最简单做毕业设计实物的网站
  • 正规网站开发文案电商网站与企业网站区别
  • 襄阳做网站比较有实力的公司长沙出名的网站设计推广
  • 徐州网站设计师最便宜的购物平台
  • 网站域名和空间费用wordpress是是什么技术
  • 企业制作网站一般多少钱上海网站制作费用
  • 苏州住建网站什么叫关键词
  • 电商网站开发过程是什么推广整合营销