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

seo查询是什么商城网站不易优化

seo查询是什么,商城网站不易优化,青岛房产网官网,江苏网站建站系统哪家好Python3 爬虫学习笔记第十四章 —— 【验证码对抗系列 — 点触验证码】文章目录【14.1】关于点触验证码【14.2】点触验证码攻克思路【14.3】模拟登录 12306 — 总体思路【14.4】主函数【14.5】初始化函数【14.6】破解入口函数【14.7】账号密码输入函数【14.8】页面截图函数【14… Python3 爬虫学习笔记第十四章 —— 【验证码对抗系列 — 点触验证码】 文章目录【14.1】关于点触验证码【14.2】点触验证码攻克思路【14.3】模拟登录 12306 — 总体思路【14.4】主函数【14.5】初始化函数【14.6】破解入口函数【14.7】账号密码输入函数【14.8】页面截图函数【14.9】验证码元素查找函数【14.10】获取验证码坐标函数【14.11】验证码剪裁函数【14.12】验证码坐标解析函数【14.13】验证码模拟点击函数【14.14】模拟点击登陆函数【14.15】效果实现动图【14.16】完整代码【14.1】关于点触验证码 点触验证码是由杭州微触科技有限公司研发的新一代的互联网验证码使用点击的形式完成验证采用专利的印刷算法以及加密算法保证每次请求到的验证图具有极高的安全性常见的点触验证码如下 【14.2】点触验证码攻克思路 点触验证码相对其他类型验证码比较复杂如果依靠 OCR 图像识别点触验证码则识别难度非常大此时就要用到互联网的验证码服务平台这些服务平台全部都是人工在线识别准确率非常高原理就是先将验证码图片提交给平台平台会返回识别结果在图片中的坐标位置然后我们再解析坐标模拟点击即可常见的打码平台有超级鹰、云打码等打码平台是收费的拿超级鹰来说1元 1000题分识别一次验证码将花费一定的题分不同类型验证码需要的题分不同验证码越复杂所需题分越高比如 7 位中文汉字需要 70 题分常见 4 ~ 6 位英文数字只要 10 题分其他打码平台价格也都差不多 以下以超级鹰打码平台和中国铁路12306官网来做练习 【14.3】模拟登录 12306 — 总体思路 首先在超级鹰打码平台注册账号并申请一个软件 ID官网http://www.chaojiying.com/ 先充值一块钱得到 1000 题分观察 12306 官网发现验证码是要我们点击所有满足条件的图片一般有 1~4 张图片满足要求由此可确定在超级鹰打码平台的验证码类型为 9004坐标多选,返回1~4个坐标,如:x1,y1|x2,y2|x3,y3 获取其 Python APIhttp://www.chaojiying.com/download/Chaojiying_Python.rar 然后用 Selenium 模拟登陆获取到验证码并将验证码发送给超级鹰后台返回识别图片的坐标最后模拟点击即可整个过程的实现由主程序 12306.py 和超级鹰 API chaojiying.py 组成 整个程序包含的函数 def __init__(): 初始化 WebDriver、Chaojiying 对象等 def crack(): 破解入口、获取、识别验证码、模拟登录 def open(): 账号密码输入 def get_screenshot(): 整个页面截图 def get_touclick_element(): 获取验证码位置 def get_position(): 获取验证码坐标 def get_touclick_image(): 剪裁验证码部分 def get_points(self, captcha_result): 分析超级鹰返回的坐标 def touch_click_words(self, locations): 模拟点击符合要求的图片 def login(self): 点击登陆按钮完成模拟登录整个程序用到的库 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 Chaojiying from selenium.common.exceptions import TimeoutException【14.4】主函数 if __name__ __main__:crack CrackTouClick()crack.crack()【14.5】初始化函数 USERNAME 155******** PASSWORD ***********CHAOJIYING_USERNAME ******* CHAOJIYING_PASSWORD ******* CHAOJIYING_SOFT_ID ******** CHAOJIYING_KIND 9004class CrackTouClick():def __init__(self):self.url https://kyfw.12306.cn/otn/resources/login.htmlpath 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.email USERNAMEself.password PASSWORDself.chaojiying Chaojiying_Client(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)定义 12306 账号USERNAME、密码PASSWORD、超级鹰用户名CHAOJIYING_USERNAME、超级鹰登录密码CHAOJIYING_PASSWORD、超级鹰软件 IDCHAOJIYING_SOFT_ID、验证码类型CHAOJIYING_KIND登录链接 urlhttps://kyfw.12306.cn/otn/resources/login.html 谷歌浏览器驱动的目录path浏览器启动参数并将相关参数传递给超级鹰 API 【14.6】破解入口函数 def crack(self):self.open()image self.get_touclick_image()bytes_array BytesIO()image.save(bytes_array, formatPNG)result 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()调用 open() 函数输入账号密码 调用 get_touclick_image() 函数获取验证码图片 利用超级鹰 Python 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() 函数对符合要求的图片进行点击然后点击登陆按钮模拟登陆 使用 try-except 语句判断是否出现了用户信息判断依据是是否有用户姓名的出现出现的姓名和实际姓名一致则登录成功如果失败了就重试超级鹰会返回该分值 【14.7】账号密码输入函数 def open(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.email)password.send_keys(self.password)分析页面可知登陆页面 URL 为https://kyfw.12306.cn/otn/resources/login.html 该页面默认出现的是扫描二维码登陆所以要先点击账号登录找到该 CSS 元素为 login-hd-account调用 click() 方法实现模拟点击此时出现账号密码输入框同样找到其 ID 分别为 J-userName 和 J-password调用 send_keys() 方法输入账号密码 【14.8】页面截图函数 def get_screenshot(self):screenshot self.browser.get_screenshot_as_png()screenshot Image.open(BytesIO(screenshot))return screenshot对整个页面进行截图 【14.9】验证码元素查找函数 def get_touclick_element(self):element self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, .login-pwd-code)))return element同样分析页面验证码所在位置的 CSS 为 login-pwd-code 【14.10】获取验证码坐标函数 def get_position(self):element self.get_touclick_element()time.sleep(3)location element.locationsize element.sizetop, bottom, left, right location[y], location[y] size[height], location[x], location[x] size[width]return (top, bottom, left, right)location 属性可以返回该图片对象在浏览器中的位置坐标轴是以屏幕左上角为原点x 轴向右递增y 轴向下递增size 属性可以返回该图片对象的高度和宽度由此可以得到验证码的位置信息 【14.11】验证码剪裁函数 def get_touclick_image(self, name12306.png):top, bottom, left, right self.get_position()screenshot self.get_screenshot()captcha screenshot.crop((left, top, right, bottom))captcha.save(name)return captcha根据验证码的坐标信息对页面截图进行剪裁得到验证码部分将其保存为 12306.png 【14.12】验证码坐标解析函数 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 locationsget_points() 方法将超级鹰的验证码识别结果变成列表的形式 【14.13】验证码模拟点击函数 def touch_click_words(self, locations):for location in locations:print(location)ActionChains(self.browser).move_to_element_with_offset(self.get_touclick_element(), location[0]/1.25, location[1]/1.25).click().perform()touch_click_words() 方法通过调用 move_to_element_with_offset() 方法依次传入解析后的坐标点击即可 【14.14】模拟点击登陆函数 def login(self):submit self.wait.until(EC.element_to_be_clickable((By.ID, J-login)))submit.click()分析页面找到登陆按钮的 ID 为 J-login调用 click() 方法模拟点击按钮实现登录 【14.15】效果实现动图 最终实现效果图关键信息已经过打码处理 【14.16】完整代码 12306.py 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 Chaojiying_Client from selenium.common.exceptions import TimeoutExceptionUSERNAME 155******** PASSWORD ***********CHAOJIYING_USERNAME *********** CHAOJIYING_PASSWORD *********** CHAOJIYING_SOFT_ID ****** CHAOJIYING_KIND 9004class CrackTouClick():def __init__(self): #登陆self.url https://kyfw.12306.cn/otn/resources/login.htmlpath 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.email USERNAMEself.password PASSWORDself.chaojiying Chaojiying_Client(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)def crack(self):self.open()image self.get_touclick_image()bytes_array BytesIO()image.save(bytes_array, formatPNG)result 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 open(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.email)password.send_keys(self.password)def get_screenshot(self):screenshot self.browser.get_screenshot_as_png()screenshot Image.open(BytesIO(screenshot))return screenshotdef get_touclick_element(self):element self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, .login-pwd-code)))return elementdef get_position(self):element self.get_touclick_element()time.sleep(3)location element.locationsize element.sizetop, bottom, left, right location[y], location[y] size[height], location[x], location[x] size[width]return (top, bottom, left, right)def get_touclick_image(self, name12306.png):top, bottom, left, right self.get_position()screenshot self.get_screenshot()captcha screenshot.crop((left, top, right, bottom))captcha.save(name)return captchadef 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 locationsdef touch_click_words(self, locations):for location in locations:print(location)ActionChains(self.browser).move_to_element_with_offset(self.get_touclick_element(), location[0]/1.25, location[1]/1.25).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()chaojiying.py import requests from hashlib import md5class Chaojiying_Client(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()
http://www.sadfv.cn/news/36989/

相关文章:

  • 怎样做网站标题的图标企业网站建设存在的问题及建议
  • php 开发手机网站建设网站 产品原型
  • 英文版企业网站布局设计网站开发技术方案实验报告
  • 自己房子做民宿挂什么网站迪庆州住房和城乡建设局网站
  • 网站开发不提供源代码图片网站模板下载
  • 大朗做网站的诸暨网站制作设计
  • 网站建设报价单 excel做企业网站的人才
  • 网站建设价格套餐福田网站制作报价
  • 网站没有备案可以做seo优化吗洛阳已经开始群体感染了
  • 建站之星7大核心价值怎么做本地婚姻介绍网站
  • 网站空间选择的主要原则有哪些wordpress 页面标签页
  • 网站建设与管理教案亚马逊seo是什么
  • 北京网站上排名网易企业邮箱登录参数错误
  • 郑州网站建设方案服务公司施工企业主要负责人包括
  • 一起做网站17怎么下单windows优化大师自动下载
  • 制作手机网站用什么软件妇联网站建设背景
  • 类似好123门户网站开发复杂么wordpress突然访问不了
  • 黄页网页的推广网站下载番禺网站建设外包
  • 建设网站的服务费是指什么百度账户托管运营
  • 望谟网站建设郑州seo排名扣费
  • 网站建设常见错误沈阳企业自助建站系统
  • 网站编程图免费行情网站
  • 网站推广目标是什么甘肃营销型网站制作
  • 公司做免费网站wordpress 模版 cho's
  • 网站建设成交话术wordpress汽车主题公园
  • 免费网站管理系统怎样用电脑做网站服务器
  • 图片库网站建设吉林省做网站公司
  • 详情页在线设计网站做本地网站卖
  • 做轻时尚的网站想注册一个设计网站吗
  • 做团购网站需要多少钱开发一个网站要多久