背景:

  遇到一个项目,使用的是钉钉扫码登录,一时间不知道该怎么下手了,还是先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. 反射实现增删改查(DAO层)——查询数据

    先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * * 数据查询 * */ @Override public List<?> queryObject(List<Map& ...

  2. 【转】C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字

    源地址:http://www.cnblogs.com/94cool/p/4332957.html

  3. hdu 5693 D Game

    D Game HDU - 5693 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它发明了一个游戏:D游戏. 度度熊的英文并不是很高明,所以这里的D,没什么高深的含义,只是代指等差数列[(等差 ...

  4. Discuz!快速对接个人支付插件

    ## Discuz!快速对接个人支付插件 由于近期准备使用老牌论坛程序Discuz建立一个交流社区分享一些资源,但是测试了各种支付方式都不满意,偶然发现一个简直不要太完美的解决方案.今天抽时间搭建好并 ...

  5. AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制

    AIDE 高级入侵检测环境:是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了. AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件.AIDE数 ...

  6. 洛谷P1318 积水面积

    题目描述 一组正整数,分别表示由正方体叠起的柱子的高度.若某高度值为\(x\),表示由\(x\)个正立方的方块迭起(如下图,\(0<=x<=5000\)).找出所有可能积水的地方(图中蓝色 ...

  7. 【外部节点】json判断@表示正在处理的当前数组项或对象。过滤器还可用于$引用当前对象之外的属性

    $.store.book[?(@.price < $.expensive)] { "category" : "reference", "auth ...

  8. 3Ds Max FTL:Virtual device creation failed.

    1.在安装完成并激活3DsMax2017中文版后,启动提示:渲染错误消息:FTL: Virtual device creation failed.(中文译:虚拟设备的创建失败). 2.关闭渲染错误消息 ...

  9. @RequestBody注解的用法

    以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一 ...

  10. jquery——动画

    1.通过animate方法可以设置元素某属性值上的动画 <!DOCTYPE html> <html lang="en"> <head> < ...