使用pyppeteer淘宝登录

现在淘宝的商品搜索页必须要登录才能见,所以必须要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

打开网站并截图

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来下载。可以去官方文档去看更多的用法,比如说点击、滑动等等,原理和selenium一样的。

登录淘宝

整体逻辑很简单:

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

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

登录的主代码:

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. 开线程检查账号是否已过期,若过期重新登录即可

原文发布于微信公众号 - Python爬虫与算法进阶(zhangslob)

原文发表时间:2019-02-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券