少女祈祷中...

解决pixiv登录机制添加Google V3验证


本篇概述:本文主要解决爬虫登录pixiv问题。8月份 pixiv 添加 recaptcha_v3(Google V3版本验证)


1、Google V3验证?

何为 Google 验证码(reCAPTCHA v3)?

reCAPTCHA v3 会以嵌入js的方式,给网站后台返回一个分数,这个分数是用于判断用户是否是机器人,分数的范围是0~1,分数约接近0,越像机器人;

2、使用之前文章中的代码模拟登录 Pixiv

文章地址:Python爬虫-pixiv关注画师作品[1]

结果

json 数据格式化一下 ↓

3、分析

我反复登录了几次,网页上并发现没有出现上图的 “I’m not a robot”

但是在登录抓包却看到 recaptcha_v3_token的值不为空,以前这个字段我记得是空的。

打开登录页面,f12打开调试工具–Network,点击XHR分页,可以看到每隔一段时间,通过 reload 重新请求一个 recaptcha_v3_token

(稍微等待一下,一会儿就会看到第二个reload出来了) ↓

登录的 from data,这个 recaptcha_v3_token ↓

截个图,看看请求 recaptcha_v3_token 要 post 的字段 ↓

4、解决方案

1、手动抓包,在 headers 加入cookie 字段

图太长,手动省略 ↓

2、selenium 抓取 (略)

个人比较喜欢用纯代码实现,虽然 selenium 也是要写代码。

3、selenium + requests (正文)

[Warning]:该方法食用前,请先确保手动在 Chrome 上登录 pixiv

selenium 自动保存 cookies

requests 读取 cookies 并维持会话

Talk is cheap , Show me code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from selenium import webdriver
import os
import json
import requests
from requests.cookies import RequestsCookieJar

# user data目录
pro_dir = r'C:\Users\Hatsune Miku\AppData\Local\Google\Chrome\User Data'

def get_cookie():
'''
获取本地cookies
'''
# 添加配置
chrome_options = webdriver.ChromeOptions()
# 静默模式
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--start-maximized')
# 添加user data目录
chrome_options.add_argument('user-data-dir='+os.path.abspath(pro_dir))
driver = webdriver.Chrome(chrome_options=chrome_options)
# 访问后,获取cookies
driver.get('https://www.pixiv.net/')
cookies = driver.get_cookies()
# 保存cookies
with open("pixiv_cookies.txt", "w") as fp:
json.dump(cookies, fp)
driver.close()

def read_cookie():
'''
读取cookies
'''
jar = RequestsCookieJar()
with open("pixiv_cookies.txt", "r") as fp:
cookies = json.load(fp)
for cookie in cookies:
jar.set(cookie['name'], cookie['value'])
return jar

def rep(jar):
'''
携带cookies对象并验证
'''
# 此为个人关注画师页面
url = 'https://www.pixiv.net/bookmark.php?type=user'
headers = {
'referer': 'https://accounts.pixiv.net/login',
'origin': 'https://accounts.pixiv.net',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
html = se.get(url,headers=headers,cookies=jar)
return html

if __name__ == '__main__':
get_cookie()
se = requests.session() # 定义session对象
jar = read_cookie()
html = rep(jar)
with open('bookmark.html','w+',encoding='utf8') as fp:
fp.write(html.text)
os.system('start bookmark.html') # 打开文件

结果展示

代码运行结束,会打开一个个人关注画师网页(selenium运行中的警报再想办法处理了)

可以将上面代码稍作修改,然后再封装成一个获取 cookies 对象的函数,后面直接携带这个 cookies 就行了

剩下的,想要拿收藏的插画√、关注的画师√、排行榜插画√ 都是可以的。

-------------本文结束感谢您的阅读-------------

本文标题:解决pixiv登录机制添加Google V3验证

文章作者:Coder-Sakura

发布时间:2019年08月29日 - 14:50:29

最后更新:2019年10月27日 - 15:17:27

原始链接:https://coder-sakura.github.io/blog/2019/08/29/pixiv-new-login/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。