seckill

京东自动登录

注:本文所做操作皆以京东web为例

包含:xpath,splinter,ocr

遇到的坑:

  1. 登录页面通过查看网页元素,能看到账户,密码唯一id,但是执行

    1
    2
    browser.fill("loginname", name)  # 填写账户密码
    browser.fill("nloginpwd", passwd)

    报错信息

    1
    selenium.common.exceptions.InvalidElementStateException: Message: invalid element state: Element is not currently interactable and may not be manipulated

    实际原因如下

    1
    元素你看得到,但是代码要操作的元素是跟随鼠标变更样式的,或者其他条件实时变更的,导致代码不能“看见”。这种情况就需要通过js操作dom元素来适应场景。

    经过分析,查看网页源代码可以看到,实际被js代码渲染,可能更改,所以一定要保持页面如真是用户操作一样,方可。所以添加如下代码,解决问题

    1
    2
    3
    大专栏  seckill="code">
    browser.click_link_by_text("账户登录")#使login,passwd可见
    browser.fill("loginname", name)
    browser.fill("nloginpwd", passwd)

    2.京东验证吗

    注:京东验证码阻塞了俩天,通过搜索知道京东验证码由三部分组成;

    1
    acid,uid,yys三部分拼装而成,acid,uid为固定值,可以从页面直接抓取,yys为随机生成的13为字符串,拼装而成的验证码例如url=https://authcode.jd.com/verify/image?a=1&acid=b6ff1eca-e3e5-4692-904b-be35da5f0752&uid=b6ff1eca-e3e5-4692-904b-be35da5f0752&yys=5436761901589

    过程1. requests 请求url获取一直ok,通过requests返回值result, 查看result.text发现返回的为京东首页的html网页内容,显然有误,查看返回302代码,重定向。定位问题,应该是访问url,ok.requests headers 有误。然后添加了cookie,返回200

    过程2. 返回200,查看返回数据,发现一堆乱码,以为是编码问题,打印result.encoding,返回None,应该不是编码问题。经搜索,返回如果是图片,应该是二进制数据,所以乱码。尝试保存数据到硬盘,发现验证码图片保存成功。

    过程3. 调用百度ocr接口,实现验证码识别,准确度不高,有待提高

代码地址:

1
https://github.com/wanderingpuppy/seckill
原文地址:https://www.cnblogs.com/lijianming180/p/12370762.html