背景:

  遇到一个项目,使用的是钉钉扫码登录,一时间不知道该怎么下手了,还是先F12抓包看下都有什么数据传输吧。

分析:

  先熟悉下钉钉扫码登录的逻辑,参考官文:https://open-doc.dingtalk.com/microapp/serverapi2/kymkv6

正常操作,步骤

1、打开扫码登录页面

2、打开手机钉钉扫描后,手机钉钉显示这个授权页面,点击登录按钮,二维码页面就会跳转至系统内部登录成功。

F12分析下网络数据传输

1、在扫码登录页面,刷新页面(必须要刷新,否则不会调用default_yto接口)会生成一个新的二维码,同时查看网络,发现http://*.*.*/public/api/authenticate/ddtalk/default_yto接口返回中有gotoUrl,访问这个链接

2、访问后会显示登录钉钉页面,同时注意到页面上方写着统一登录平台(测试环境),说明此登录就是为了目标网站登录做授权:

3、输入账号密码后,成功进入系统,搞定!开心

 操作:

  上面已经分析出来了,步骤如下:

  1、调用default_yto接口,提取到gotoUr链接

  2、访问该链接,使用selenium输入账户和密码登录系统

实现代码如下:

文字版:

*** Settings ***
Library RequestsLibrary
Library Selenium2Library *** Keywords ***
登录
${content-type} Create Dictionary Content-Type application/json
Create Session api url=http://*.*.*.* headers=${content-type}
${ret} Get Request api /public/api/authenticate/ddtalk/default_yto
log ${ret.content}
${result_json} To Json ${ret.content}
${gotoUrl} Set Variable ${result_json['data']['gotoUrl']}
log ${gotoUrl}
Open Browser ${gotoUrl} gc
Click Element //a[contains(text(),'登录钉钉账号')]
Click Element //div[contains(text(),'请输入手机号码')] #必须点击div,再input,否则不能定位元素
Input Text //*[@id="mobile"] *******
Click Element //div[contains(text(),'请输入密码')]
Input Password //input[@id="pwd"] **********
Click Element //a[@id="loginBtn"]

遇到的问题:

  1、定位“登录钉钉账号”元素

  定位登录钉钉账号按钮时,总是提示找不到元素,

  绝对路径:/html/body/section[2]/a[1]

  相对路径://*[@href='https://login.dingtalk.com/login/index.htm?goto=https%3A%2F%2Foapi.dingtalk.com%2Fconnect%2Foauth2%2Fsns_authorize%3Fappid%3Ddingoap0sqtaucbscestgg%26response_type%3Dcode%26scope%3Dsnsapi_login%26state%3D47414c2cd98b8b106b03da509cf1361bsrWbAM4S19o%26redirect_uri%3Dhttp%3A%2F%2F61.152.207.98%2Fpublic%2Fapi%2Fauthenticate%2Fddtalk%2Fcallback']

  等等各种方法都找不到元素,还联系了钉钉客服,问是不是做了反爬,反爬也是针对调用接口说的,我这只是页面点击元素应该不至于吧。

  最后使用//a[contains(text(),'登录钉钉账号')],成功定位到元素。

  2、定位输入账号密码输入框元素

    元素定位时,发现聚焦输入框时对应的html是div标签,奇怪,不应该是input框吗?

    既然人家定位到div标签那就写div标签的xpath吧,但是无论如何都不能输入,

  

  在输入框中输入数据后,定位又指向了input标签,怀疑是需要先点击一下div元素,在input输入,实施后果然如我猜想,好了,搞定了,休息下吧。

  

总结: 

  1、定位元素时使用xpath的话,//后最好加上需要定位的标签,如定位登录钉钉账号元素//a[contains(text(),'登录钉钉账号')],不要写成//*[contains(text(),'登录钉钉账号')],这样有可能找不到元素,而且效率低。

  2、定位元素暂时找不到,不要心急,各种换,总有能定位到的。

RobotFramework:钉钉扫码登录UI自动化的更多相关文章

  1. 使用Django2.0.4集成钉钉第三方扫码登录

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_124 钉钉作为阿里旗下的一款免费移动通讯软件,受众群体越来越多,这里我们使用Django来集成一下钉钉的三方账号登录,首先注册钉钉 ...

  2. 钉钉授权第三方WEB网站扫码登录

    一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...

  3. 钉钉扫码登录web网站

    钉钉扫码登录网站 前言  由于本公司前后台分离,这里主要讲述后台的实现逻辑与过程,前端相关的一略而过.前端我们采用的是把二维码内嵌到我们的网页中. 流程如下: 1.登录钉钉后台创建一个企业应用 2.根 ...

  4. (钉钉)第三方WEB网站扫码登录

    年底在做钉钉和公司的知识库产品的对接,怎么使用钉钉api的如下: 第一步: 登录:https://oa.dingtalk.com/#/welcome 这点可以自己建立一个企业账号进行测试 点击工作台建 ...

  5. 【JavaWeb开发】初步实现网站应用钉钉扫码登录

    http://blog.csdn.net/baofeidyz/article/details/59059379 版权声明:转载请注明我的个人微信平台 暴沸 目录(?)[+] 写在前面:如果你还不知道钉 ...

  6. uniapp实现钉钉扫码登录

    由于uniapp暂无钉钉授权登录所以本文将钉钉扫码登录作为网页嵌入uniapp,最终实现钉钉扫码登录app 1. 用H5调起钉钉扫码登录 钉钉在网页端的扫码登录可参考钉钉文档:扫码登录第三方网站 - ...

  7. 网页接入dingding扫码登录

    前言 有时候我们做了一些网页,希望只有某些人才能看的话,可以搞一个钉钉扫码登录,接入也比较简单,下面记录下接入的过程. 流程 我们先看看官方的文档:钉钉接入文档梳理一下官方的流程:1.先跳去一个扫码网 ...

  8. Web应用多账号系统设计及微信扫码登录实现

    Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...

  9. spring boot高性能实现二维码扫码登录(上)——单服务器版

    前言 目前网页的主流登录方式是通过手机扫码二维码登录.我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查 ...

随机推荐

  1. cf873F(xjb+二分)

    题目链接:http://codeforces.com/problemset/problem/837/F 题意:给出一个大小为 n 的数组 a 和一个数 k,每次操作后的到一个 a' 数组,a'i 为 ...

  2. 为什么要把系统拆分成分布式的,为啥要用Dubbo?

    阅读本文大概需要 6 分钟. 作者:yanglbme 1.面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 2.面试官心里分析 从这个问题开始就进行分布式系统环节了,好 ...

  3. C 语言实例 - 计算一个数的 n 次方

    C 语言实例 - 计算一个数的 n 次方 计算一个数的 n 次方,例如: ,其中 为基数, 为指数. 实例 - 使用 while #include <stdio.h> int main() ...

  4. AT2382 A or...or B Problem

    传送门 还是看题解的啦 先考虑一个显而易见的结论:A和B二进制下最高的几位相同是没用的(设去掉的那些位之和为sum) 然后我们设\(d\)为二进制下从高位到低位第一位不相同的,\(k\)为B从高位到低 ...

  5. chrome安装文件点击没有反应(收藏用)

    备份Chrome浏览器用户数据 关闭Chrome浏览器,用Windows资源管理器打开%LOCALAPPDATA%\Google,复制Chrome文件夹到其它目录.   打开程序和功能管理功能 按下W ...

  6. 红黑树(Red-Black Tree),B树,B-树,B+树,B*树

    (一)红黑树(Red-Black Tree) http://www.cnblogs.com/skywang12345/p/3245399.html#a1 它一种特殊的二叉查找树.红黑树的每个节点上都有 ...

  7. 011 Container With Most Water 盛最多水的容器

    给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) .画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线,使得它们 ...

  8. 010 Regular Expression Matching 正则表达式匹配

    Implement regular expression matching with support for '.' and '*'.'.' Matches any single character. ...

  9. GCD Guessing Game Gym - 100085G 猜数字 gcd

    http://codeforces.com/gym/100085/attachments 因为那个数字是一个质数,这样的猜的次数是最多的,所以至少是质数次. 但是如果需要猜2.3,那么可以直接猜6,也 ...

  10. java多线程关键字volatile的使用

    java多线程关键字volatile的作用是表示多个线程对这个变量共享. 如果是只读的就可以直接用,写数据的时候要注意同步问题. 例子: package com.ming.thread.volatil ...