Fork me on GitHub

使用pyppeteer淘宝登录

1
这是崔斯特的第八十七篇原创文章

使用pyppeteer淘宝登录,获取Cookies

现在淘宝的商品搜索页必须要登录才能见,所以必须要cookies才能进行下一步操作。本期介绍如何使用pyppeteer登录淘宝,获取Cookies。

pyppeteer介绍

地址:https://github.com/miyakogi/pyppeteer

介绍:Unofficial Python port of puppeteer JavaScript (headless) chrome/chromium browser automation library.非官方的chrome浏览器,前身是JavaScript的puppeteer

安装:python3 -m pip install pyppeteer

打开网站并截图

1
2
3
4
5
6
7
8
9
10
11
12
13
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://zhangslob.github.io/')
await page.screenshot({'path': 'zhangslob.png'})
await browser.close()
asyncio.get_event_loop().run_until_complete(main())

第一次运行时需要下载Chromium,你可以提前在终端输入pyppeteer-install来下载。

登录淘宝

整体逻辑很简单:

  1. 设置pyppeteer启动项,打开一个浏览器
  2. 打开淘宝登录页面
  3. 修改浏览器属性
  4. 输入账号密码
  5. 滑动滑块
  6. 登录

代码太长,可以直接去Github上看,记得要加上自己的账号密码。记得要用小号,如果长时间使用一个账号,会出现各种各样的验证。

登录的主代码:

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
async def taobao_login(username, password, url):
"""
淘宝登录主程序
:param username: 用户名
:param password: 密码
:param url: 登录网址
:return: 登录cookies
"""
###
await page.click('#J_QRCodeLogin > div.login-links > a.forget-pwd.J_Quick2Static')
page.mouse
time.sleep(1)
# 输入用户名,密码
await page.type('#TPL_username_1', username, {'delay': input_time_random() - 50}) # delay是限制输入的时间
await page.type('#TPL_password_1', password, {'delay': input_time_random()})
time.sleep(2)
# 检测页面是否有滑块。原理是检测页面元素。
slider = await page.Jeval('#nocaptcha', 'node => node.style') # 是否有滑块
if slider:
print('当前页面出现滑块')
# await page.screenshot({'path': './headless-login-slide.png'}) # 截图测试
flag, page = await mouse_slide(page=page) # js拉动滑块过去。
if flag:
await page.keyboard.press('Enter') # 确保内容输入完毕,少数页面会自动完成按钮点击
print("print enter", flag)
await page.evaluate('''document.getElementById("J_SubmitStatic").click()''') # 如果无法通过回车键完成点击,就调用js模拟点击登录按钮。
time.sleep(2)
cookies_list = await page.cookies()
print(cookies_list)
return await get_cookie(page) # 导出cookie 完成登陆后就可以拿着cookie玩各种各样的事情了。
else:
print("")
await page.keyboard.press('Enter')
print("print enter")
await page.evaluate('''document.getElementById("J_SubmitStatic").click()''')
await page.waitFor(20)
await page.waitForNavigation()
try:
global error # 检测是否是账号密码错误
print("error_1:", error)
error = await page.Jeval('.error', 'node => node.textContent')
print("error_2:", error)
except Exception as e:
error = None
finally:
if error:
print('确保账户安全重新入输入')
# 程序退出。
loop.close()
else:
print(page.url)
return await get_cookie(page)

所有代码在AwesomeCrawler/taobao_login

如何建立Cookie池

必须多个账号,那么如何注册多个淘宝账号呢。。

  1. 可以通过第三方提供手机号验证码服务商,通过pyppeteer注册账号,保存账号信息
  2. 登录账号并保存在redis
  3. 开线程检查账号是否已过期,若过期重新登录即可