selenium案例之RAM 用户登录 aliyun

news2024/9/30 9:36:02

文章目录

    • 0x00 Selenium
    • 0x01 整体流程 思路
      • 1.1 打开浏览器并且访问 登录页面 url: https://signin.aliyun.com/login.htm#/main
      • 1.2 定位 "用户名" input 和 "下一步" button 点击下一步
      • 1.3 定位 "密码" input 和 "登录" button 点击登录
      • 1.4 安全码的定位、输入和提交确认
    • 0x02 完整代码

0x00 Selenium

         Selenium 是一个用于自动化测试和 Web 应用程序测试的开源工具集。它提供了一系列的 API 和工具,允许开发者模拟用户在浏览器中的交互行为,从而进行自动化的功能测试、性能测试和界面测试等。

0x01 整体流程 思路

1.1 打开浏览器并且访问 登录页面 url: https://signin.aliyun.com/login.htm#/main

在这里插入图片描述

# 最新版本谷歌浏览器 绕过检测
options = webdriver.ChromeOptions() # 创建一个 ChromeOptions 对象,用于配置 Chrome WebDriver 的选项。
options.add_experimental_option('excludeSwitches', ['enable-automation']) # 这个配置项用来隐藏浏览器自动化特征,绕过一些检测机制
options.add_argument('--disable-blink-features=AutomationControlled') # : 这个配置项也是为了隐藏自动化特征
options.add_experimental_option("excludeSwitches",["enable-logging"]) # 隐藏启用日志记录的开关
# 初始化 WebDriver
driver = webdriver.Chrome(options=options)  # 或者使用其他浏览器的 WebDriver
driver.maximize_window() #将浏览器窗口最大化


# 最新版本谷歌浏览器 绕过检测

# 打开阿里云登录页面
driver.get("https://signin.aliyun.com")
driver.maximize_window()

1.2 定位 “用户名” input 和 “下一步” button 点击下一步

首先认识个 Selenium 的一个方法
         find_elementSelenium 中用于定位网页元素的方法。它用于在网页中找到满足特定条件的单个元素,并返回一个代表该元素的对象,可以用来进行后续的操作,例如点击、输入文本等。

find_element不同的定位方式,常用的包括:

  1. By.ID: 使用元素的 id 属性来定位元素。
  2. By.NAME: 使用元素的 name 属性来定位元素。
  3. By.CLASS_NAME: 使用元素的 class 属性来定位元素。
  4. By.TAG_NAME: 使用元素的标签名来定位元素。
  5. By.XPATH: 使用 XPath 表达式来定位元素。
  6. By.CSS_SELECTOR: 使用 CSS 选择器来定位元素。

find_element方法基本用法


find_element(By, value): 根据指定的定位方式和值来定位元素,例如 find_element(By.ID, "element_id")。
click(): 点击元素。
send_keys(text): 在元素中输入文本。
clear(): 清除元素中的文本。
submit(): 提交表单元素(例如 form 标签)。
get_attribute(name): 获取元素的指定属性值,例如 element.get_attribute("href")。
text: 获取元素的文本内容,例如 element.text。
is_displayed(): 判断元素是否可见。
is_enabled(): 判断元素是否可用(enabled)。
is_selected(): 判断复选框或单选框元素是否被选中。
属性:

tag_name: 获取元素的标签名,例如 element.tag_name。
id: 获取元素的 id 属性,例如 element.id。
size: 获取元素的大小,返回一个字典,包含 width 和 height。
location: 获取元素在页面中的坐标,返回一个字典,包含 x 和 y。
value_of_css_property(property_name): 获取元素的指定 CSS 属性值,例如 element.value_of_css_property("color")。
需要注意的是,定位到的元素对象是一个 WebElement 对象,你可以通过调用不同的方法和访问不同的属性来操作和获取元素的信息。定位方式使用的是 By 枚举类,它包含了不同的定位方法,如 By.ID、By.NAME、By.XPATH 等。

以上是一些常用的方法和属性,根据你的具体需求,可以使用不同的方法和属性来与定位到的元素进行交互。

用户名使用 id属性 定位 input标签 idloginName
在这里插入图片描述

# 1、用户名的定位、输入和提交
# 定位用户名 input
username_input = driver.find_element(By.ID, "loginName")
username = input("请输入用户名:")
#输入 RAM 用户名
username_input.send_keys(username) # 

下一步 按钮 可以使用 XPATH 表达式来定位,选中按钮右击检查复制Xpath

在这里插入图片描述
Setp_1为第一个点击动作(下一步),使用click()方法触发

# 定位 "下一步"button1  提交确认用户表单
Step_1 =  driver.find_element(By.XPATH, '/html/body/div[2]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div/div/div/form/div[5]/button')
Step_1.click()
print("用户名已提交 等待5秒...")
time.sleep(5)

模拟用户名提交后,进入下阶段 密码提交

1.3 定位 “密码” input 和 “登录” button 点击登录

密码也使用 id属性定位 input标签 idloginPassword在这里插入图片描述
选中"登录"按钮右击检查复制XPATH
Setp_2 为第二个点击动作(登录),使用click()方法触发

# 2、密码的定位、输入和提交
#定位 密码 input
password_input = driver.find_element(By.ID, "loginPassword")
#输入密码
password = input("请输入密码: ")
password_input.send_keys(password)
# 定位 button2 提交确认密码表单
Setp_2 = driver.find_element(By.XPATH,'/html/body/div[2]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div/div/div/form/div[5]/button')
Setp_2.click()
print("密码已提交 等待5秒...")
time.sleep(5)

1.4 安全码的定位、输入和提交确认

有的用户设置了安全码,有的没有设置,所有用 try来判断
同样使用XPATH定位

try:
#3、安全码的定位、输入和提交确认
# 定位安全码 input
    MFACode_input = driver.find_element(By.CSS_SELECTOR, "input[placeholder='请输入 6 位数字安全码']")
    MFACode = input("请输入 6 位数字安全码: ")
    MFACode_input.send_keys(MFACode)
    # 定位 "button3" 提交安全码
    Setp_3 = driver.find_element(By.XPATH,'//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/form/div/div/button')
    Setp_3.click()
    print("安全码已提交 正在登陆...")
    time.sleep(15)
except NoSuchElementException:
    print("安全码不存在,跳过操作")

# 至此完成登录操作  接下来就是一些你要执行的操作



driver.quit()

0x02 完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
import datetime
import os

# 最新版本谷歌浏览器 绕过检测
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches",["enable-logging"])
# 初始化 WebDriver
driver = webdriver.Chrome(options=options)  # 或者使用其他浏览器的 WebDriver
driver.maximize_window()


# 最新版本谷歌浏览器 绕过检测

# 打开阿里云登录页面
driver.get("https://signin.aliyun.com")
driver.maximize_window()

# 1、用户名的定位、输入和提交
# 定位用户名 input
username_input = driver.find_element(By.ID, "loginName")
username = input("请输入用户名:")
#输入 RAM 用户名
username_input.send_keys(username)


# 定位 "下一步"button1  提交确认用户表单
Step_1 =  driver.find_element(By.XPATH, '/html/body/div[2]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div/div/div/form/div[5]/button')
Step_1.click()
print("用户名已提交 等待5秒...")
time.sleep(1)
# 2、密码的定位、输入和提交
#定位 密码 input
password_input = driver.find_element(By.ID, "loginPassword")
#输入密码
password = input("请输入密码: ")
password_input.send_keys(password)

# 定位 button2 提交确认密码表单
Setp_2 = driver.find_element(By.XPATH,'/html/body/div[2]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div/div/div/form/div[5]/button')
Setp_2.click()
print("密码已提交 等待5秒...")
time.sleep(5)
try:
#3、安全码的定位、输入和提交确认
# 定位安全码 input
    MFACode_input = driver.find_element(By.CSS_SELECTOR, "input[placeholder='请输入 6 位数字安全码']")
    MFACode = input("请输入 6 位数字安全码: ")
    MFACode_input.send_keys(MFACode)
    # 定位 "button3" 提交安全码
    Setp_3 = driver.find_element(By.XPATH,'//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/form/div/div/button')
    Setp_3.click()
    print("安全码已提交 正在登陆...")
    time.sleep(15)
except NoSuchElementException:
    print("安全码不存在,跳过操作")
## 等待登录完成,你可以根据需要调整等待时间
time.sleep(5)

# 至此完成登录操作  接下来就是一些你要执行的操作
。。。。。。。


driver.quit()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/905992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】自定义类型:结构体

前言 今天这篇文章,我们来学习自定义类型中的结构体类型 之前我们就初步了解过结构体类型,知道他是用来描述复杂类型的 像之前的short、int、long之类的称为C语言的内置类型 而如结构体、枚举、联合类型称为自定义类型 初识结构体 在正式学习前&…

Postgres入门:三种免费且简单的方法

大家好,开发者们!今年大约有9万人参与了Stack Overflow的调查。令人印象深刻的是,Postgres被评为第一数据库。此外,DB Engines还将PostgreSQL列为全球增长最快的数据库之一。这对我们意味着什么呢?很明显,我…

数学思维导图怎么画?别错过这几简单绘制方法

数学思维导图怎么画?数学思维导图可以帮助我们更好地组织和理解各种数学概念。不仅是学生和教师可以受益,数学思维导图也可以在研究和工作中发挥作用。这种工具可以帮助你清晰地表示各种数学概念和关系,并将它们可视化,以便更容易…

LeetCode.双指针(三)

例题一 一、题目 两数之和 II - 输入有序数组 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xf…

思维导图怎么制作?了解一下这几种制作方法

思维导图怎么制作?思维导图是一种非常有效的组织思考和表达想法的工具。它可以帮助人们更好地理解和记忆信息,并且可以通过可视化的方式帮助人们更好地理解复杂的关系和概念。制作思维导图有多种方法,例如手绘、使用电子表格或专业的思维导图…

《软件方法》强化自测题-分析(4)

DDD领域驱动设计批评文集 通过做强化自测题加入“软件方法建模师”群 《软件方法》各章合集 按照业务建模、需求、分析、设计工作流考察,答案不直接给出,可访问自测链接或扫二维码自测,做到全对才能知道答案。 知识点见《软件方法》&…

不同企业如何选择合适的CRM系统?

市场上的CRM系统千差万别,如何选到适合的CRM系统?很多企业凭借感觉盲目选型,结果上线后发现CRM系统功能不符合需求。这就好比买衣服,不试穿就买回家,结果发现尺码不合适,还不能退换。下面说说企业如何进行C…

一起学SF框架系列7.4-spring-AOP-AOP代理创建

AOP的BeanDefinition加载后,Spring提供了自动代理机制,让容器自动根据目标bean生成AOP代理bean,本文讲述具体如何实现。 基本机制 Spring的启动过程中,在bean实例化前后、初始化前后均提供了外部介入处理机制(详见“…

三、SQLServer 数据库安装集

一、Docker 安装 Docker下安装SqlServer2019Docker 安装 SQLServer 1. 创建容器 前置准备 # 1. 创建主机映射目录 mkdir -p /root/sqlserver # 2. 修改主机映射目录权限 chown -R 10001:0 /root/sqlserver创建容器 # 1、拉取镜像。 #sudo docker pull mcr.microsoft.com/mssql/…

超越函数界限:探索JavaScript函数的无限可能

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📚 前言 📘 1. 函数的基本概念 📟 1.1 函数的定义和调用 📟 1.2 …

用加持了大模型的 Byzer-Notebook 做数据分析是什么体验

Byzer-Notebook 是专门为 SQL 而研发的一款 Web Notebook。他的第一公民是 SQL,而 Jupyter 则是是以 Python 为第一公民的。 随着 Byzer 引擎对大模型能力的支持日渐完善, Byzer-Notebook 也在不自觉中变得更加强大。我和小伙伴在聊天的过程中才发现他已…

TCP定制协议,序列化和反序列化

目录 前言 1.理解协议 2.网络版本计算器 2.1设计思路 2.2接口设计 2.3代码实现: 2.4编译测试 总结 前言 在之前的文章中,我们说TCP是面向字节流的,但是可能对于面向字节流这个概念,其实并不理解的,今天我们要介…

QT:绘图事件QPainter

绘图事件QPainter 绘图事件&#xff08;需要重写的函数&#xff09;&#xff1a;paintEvent 声明一个画家对象 QPainter painter(this) 指定绘图设备 画线&#xff0c;画圆&#xff0c;画矩形&#xff0c;画文字 可设置画笔&#xff0c;画刷#include <QPainter> ...... …

剑指 Offer 48. 最长不含重复字符的子字符串(C++实现)

剑指 Offer 48. 最长不含重复字符的子字符串https://leetcode.cn/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/ dp 注意&#xff1a;缩小 不含重复字符子串 时的写法 dp_1 min(i - charToIndex[s[i]], dp_0 1); int lengthOfLongestSubstring(string s…

Autosar MCAL-S32K324 CAN-FD配置及使用

文章目录 前言配置MCAL CANCAN Controller配置CAN FD波特率配置Ram block关于MailBox 代码中使用CAN FD报文发送和接收CAN FD报文接收CAN FD报文发送 总结 前言 在之前的文章中&#xff0c;介绍了标准CAN的MCAL配置&#xff0c;在此基础上&#xff0c;扩展为CAN-FD就会容易很多…

6.RocketMQ之消费索引文件ConsumeQueue

功能&#xff1a;作为CommitLog文件的索引文件。 本文着重分析为consumequeue/topic/queueId目录下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface…

NetSuite OIDC、SAML SSO 演示

NetSuite的SSO的策略近些年处于演进过程&#xff0c;所以原来的Inbound SSO和Outbound SSO已经退出历史舞台。前者已经废止&#xff0c;后者在24年底废止。目前的SSO策略是&#xff1a; 第三方的身份认证服务商NetSuite as OIDC Provider 前者的含义是&#xff0c;把认证服务…

数据结构 - 基本概念和术语

基础概念之间的关系大致如下&#xff1a; 一、数据、数据元素、数据项和数据对象 数据 > 数据对象 > 数据元素 > 数据项 类比数据库&#xff0c;这四个概念代表的含义如下所示&#xff1a; 数据&#xff1a;整个数据库的所有数据数据对象&#xff1a;这个数据库的…

Shell脚本五:函数和数组

文章目录 1.函数1.1Shell函数的概念1.2函数的好处1.2函数的组成1.3函数的结构1.4查看函数列表1.5删除函数1.6函数的返回值1.6.1使用原则1.6.2示例 1.7函数的作用范围1.8函数递归1.8.1示例 2.数组2.1什么是数组2.2数组的作用2.3数组名和索引2.4定义数组的方式2.5普通数组和关联数…

深入理解分布式架构,构建高效可靠系统的关键

深入探讨分布式架构的核心概念、优势、挑战以及构建过程中的关键考虑因素。 引言什么是分布式架构&#xff1f;分布式架构的重要性 分布式系统的核心概念节点和通信数据分区与复制一致性与一致性模型负载均衡与容错性 常见的分布式架构模式客户端-服务器架构微服务架构事件驱动…