• 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
  • 相关阅读:
    [DB] 数据库的连接
    JS leetcode 翻转字符串里的单词 题解分析
    JS leetcode 拥有最多糖果的孩子 题解分析,六一快乐。
    JS leetcode 搜索插入位置 题解分析
    JS leetcode 杨辉三角Ⅱ 题解分析
    JS leetcode 寻找数组的中心索引 题解分析
    JS leetcode 移除元素 题解分析
    JS leetcode 最大连续1的个数 题解分析
    JS leetcode 两数之和 II
    JS leetcode 反转字符串 题解分析
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12370762.html
Copyright © 2020-2023  润新知