验证码
具体的处理方式是在DOWNLOADER_MIDDLEWARES中添加一个类,让他的处理的数字较大,
但其实最不清楚的就是池子里是如何有cookie的,可能是先手动获取cookie,然后
从池子里获取ip、端口号、cookie
我自己的使用session的方式
import requests
requests.session()
# 设置头UA
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62"
}
targetURL = 'https://www.baidu.com'
# 开启一个session会话
session = requests.session()
# 设置请求头信息
session.headers = headers
# 申明一个用于存储手动cookies的字典
manual_cookies = {}
##打开手动设置的cookies文件
# 部分网站需要滑动验证,这里通过浏览器登录成功后获取cookies手动存到文本来绕过验证,后续cookies自动更新
with open("manual_cookies.txt", 'r', encoding='utf-8') as frcookie:
cookies_txt = frcookie.read().strip(';') # 读取文本内容
print(f'cookies_txt:{cookies_txt}')
# 手动分割添加cookie
for item in cookies_txt.split(';'):
name, value = item.strip().split('=', 1) # 用=号分割,分割1次
manual_cookies[name] = value # 为字典cookies添加内容
# 将字典转为CookieJar:
cookiesJar = requests.utils.cookiejar_from_dict(manual_cookies, cookiejar=None, overwrite=True)
# 将cookiesJar赋值给会话
session.cookies = cookiesJar
# 向目标网站发起请求
res = session.get(targetURL)
# 将CookieJar转为字典:
res_cookies_dic = requests.utils.dict_from_cookiejar(res.cookies)
# 将新的cookies信息更新到手动cookies字典
for k in res_cookies_dic.keys():
manual_cookies[k] = res_cookies_dic[k]
print(manual_cookies)
# 重新将新的cookies信息写回文本
res_manual_cookies_txt = ""
# 将更新后的cookies写入到文本
for k in manual_cookies.keys():
res_manual_cookies_txt += k + "=" + manual_cookies[k] + ";"
# 将新的cookies写入到文本中更新原来的cookies
with open('manual_cookies.txt', "w", encoding="utf-8") as fwcookie:
fwcookie.write(res_manual_cookies_txt)
如何绕过验证码方式总结
1、绕过验证码。跳过验证码直接访问需要的页面内容。 2、请求头中自带验证码。有些网站的验证码会在前台 js
js中如何去检查是否有人打开了F12进行恶意调试
setInterval(function() {
check()
}, 4000);
var check = function() {
function doCheck(a) {
if (("" + a/a)["length"] !== 1 || a % 20 === 0) {
(function() {}
["constructor"]("debugger")())
} else {
(function() {}
["constructor"]("debugger")())
}
doCheck(++a)
}
try {
doCheck(0)
} catch (err) {}
};
check();
滑动验证码,不同于极验证,本验证码难度略低,需要的将滑块拖动到矩形区域右侧即可完成。
这类验证码不常见了,官方介绍地址为:https://promotion.aliyun.com/ntms/act/captchaIntroAndDemo.html
使用起来肯定是非常安全的了,不是很好通过机器检测
如何判断验证码类型
这个验证码的标识一般比较明显,在页面源码中一般存在一个 nc.js 基本可以判定是阿里云的验证码了
识别套路
截止到2019年3月18日,本验证码加入了大量的selenium关键字验证,所以单纯的模拟拖拽被反爬的概率满高的,你也知道一般情况爬虫具备时效性 不确保这种手段过一段时间还可以使用!
导入selenium必备的一些模块与方法
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
# from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver import ActionChains
import time
import random
在启动selenium之前必须要设置一个本机的代理,进行基本的反[反爬] 处理,很多爬虫在获取用户指纹的时候,都比较喜欢selenium,因为使用selenium模拟浏览器进行数据抓取,能够绕过客户JS加密,绕过爬虫检测,绕过签名机制
但是selenium越来越多的被各种网站进行了相关屏蔽,因为selenium在运行的时候会暴露出一些预定义的Javascript变量(特征字符串),例如"window.navigator.webdriver
",在非selenium环境下其值为undefined,而在selenium环境下,其值为true(我验证了,还真是!)
pip install mitmproxy
安装mitmproxy软件也不是一件简单的事,但是在这里就不赘述了!
仅仅使用代理ip用selenium就行,但是如果你想拦截一些信息,或是发送自己修改的内容就要用到mitmproxy了!
处理短信验证码就简单的多了,然而可能也是费钱,不划算!
使用短信验证码接码平台,如果用免费的,容易很快失效,因为这个平台是免费的,你知道,别人也可以知道!