首页 > 其他分享 >selenium简单使用

selenium简单使用

时间:2023-04-02 16:55:05浏览次数:35  
标签:wd 简单 selenium element elements 使用 元素 find select

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.action_chains import ActionChains
import time

# 加上参数 禁止chromedriver日志写屏
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])

# 创建webdriver对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(service=Service(r'/Users/llm/Desktop/chromedriver_mac_arm64/chromedriver'), options=options)
# 设置隐式等待
wd.implicitly_wait(10)

wd.get("https://login.fei.com")

"""
根据id选择元素,返回的是该元素对应的webElement对象
find_element会返回符合条件的第一个元素,没有符合条件的会报异常NoSuchElementException
"""
element = wd.find_element(By.ID, 'rc-tabs-0-tab-password')
element.click()

element2 = wd.find_element(By.NAME, 'tel')
element2.send_keys("1868127")

element2.clear()  # 清除输入框已有的字符
# get_attribute 可以用来获取元素的属性值, 下面是获取元素class属性的值
 print(element2.get_attribute("class"))

"""
获取html文本内容
"""
# 获取整个元素这一段的html文本内容
print(element2.get_attribute("outerHTML"))
# 获取元素内部的html文本内容
# print(element2.get_attribute("innerHTML"))
# 注意!输入框中的内容是不能通过element.text方式获取的,而是 获取元素的value属性
print(element2.get_attribute("value"))

element3 = wd.find_element(By.NAME, "current-password")
element3.send_keys("qwerty123")

element4 = wd.find_element(By.CLASS_NAME, "ant-checkbox-input")
element4.click()
element5 = wd.find_element(By.CLASS_NAME, "index_loginBtn__njGPI")
element5.click()

wd.find_element(By.CSS_SELECTOR, ".login-choose-school-role-item:nth-child(1)").click()
wd.find_element(By.CSS_SELECTOR, ".btn-primary").click()

wd.find_element(By.CLASS_NAME, "title_QeISv").click()
main_window = wd.current_window_handle

"""
寻找handle的一种方法
"""
# for handle in wd.window_handles:
#     wd.switch_to.window(handle)
#
#     if "Bing" in wd.title:
#         break

# 切换窗口句柄
wd.switch_to.window(wd.window_handles[1])

wd.find_element(By.CSS_SELECTOR, "div[class='card-container_1XUHw'] > div").click()
wd.switch_to.window(main_window)

wd.quit()
"""
根据classname选择一系列元素,find_elements返回的是一个列表,没有符合条件的会返回空列表
"""
# # 里面都是class属性值为animal的元素对应的webElement对象
# elements = wd.find_elements(By.CLASS_NAME, "animal")
# # 获取元素列表中每个元素的text属性
# for element in elements:
#     print(element.text)

"""
补充:
有时通过text获取文本内容获取不到,原因是:元素的文本内容没有展示在界面上或者没有完全展示在界面上。
可以使用以下两种方法
"""
# print(element.get_attribute("innerText"))
# print(element.get_attribute("textContent"))


"""
根据标签名选择元素,找出所有标签名为div的元素
"""
# elements = wd.find_elements(By.TAG_NAME, "div")


"""
webElement对象也可以使用 find_element 和 find_elements 方法
WebDriver 对象选择元素的范围是整个页面, WebElement对象选择元素的范围是元素内部
"""
# element = wd.find_element(By.ID, "container")
# elements = element.find_elements(By.TAG_NAME, "span")
# for e in elements:
#     print(e.text)


"""
隐式等待原理:元素没有找到的时候,selenium并不立即返回错误,而是每隔半秒重新寻找
1. 直到找到该元素
2. 或者超出最大等待时长,这才抛出异常(如果是 find_elements 之类的方法会返回空列表)
"""
# 设置最大等待时间 10, 后续所有的find_element 、find_elements之类的方法都会采用此策略
# 一般放在wd创建后设置
# wd.implicitly_wait(10)

# while True:
#     try:
#         element = wd.find_element(By.ID, '1')
#         print(element.text)
#         break
#     except:
#         time.sleep(1)


"""
切换frame,1. 传入frame的name或者id 2. 也可以传入一个frame的element对象
"""
wd.switch_to.frame("frame1")
wd.switch_to.frame(wd.find_element(By.CSS_SELECTOR, "frame[src=''sample1.html]"))
# 切换回最外层frame
wd.switch_to.default_content()


"""
select单选框
"""
# select = Select(wd.find_element(By.ID, "ss_single"))
# select.select_by_visible_text("苹果")
# select.select_by_index("1")
# select.select_by_value("苹果")
"""
select多选框
"""
# select.deselect_all()
# select.select_by_visible_text("苹果")
# select.select_by_value("橘子")
# select.deselect_by_value("橘子")

"""
鼠标移动到元素上
"""
# ac = ActionChains(wd)
# ac.move_to_element(wd.find_element(By.CSS_SELECTOR, "[name='tj_briicon']")).perform()

"""
冻结页面, 在浏览器console中输入下面这行代码:表示在5000毫秒之后,执行debugger命令
"""
# setTimeout(function(){debugger}, 5000)


"""
浏览器弹框处理。
注意:有些弹框并非浏览器弹框,而是html元素,这种使用上面的元素选择方式进行处理即可
"""
alert = wd.switch_to.alert
# 获取弹出框中的文本
print(alert.text)
# 输入文本
alert.send_keys("111")
# 点击确定按钮
alert.accept()
# 点击取消按钮
alert.dismiss()

# webElement使用xpath时的一个坑!!需要注意:
# 先寻找id为china的元素,然后再从此元素内部寻找所有的p元素。
# 此时注意 //p 前面一定要加 . , 才表示从webelement内部寻找。 否则还是寻找的webdriver整体的
china = wd.find_element(By.ID, "china")
p_elements = china.find_elements(By.XPATH, ".//p")

 

标签:wd,简单,selenium,element,elements,使用,元素,find,select
From: https://www.cnblogs.com/mlllily/p/17280765.html

相关文章

  • AirNet使用笔记4
    1、DBM“航迹与计划相关配置”中“自动相关参数”:“相关最小权重值(含)”:最小就是二次代码,航班号,地址码全部算下来的,例如航班号一致6,二次代码不一致-3,24地址码一致,最终3,满足最小权重;“直接相关权重值(含)”:权重值(含)为12,指仅正值加起来满足12,就相关,不管负值(不同时的负值)。2、DBM“发布......
  • 用OpenCv-Python自带的LBPH识别器实现简单人脸识别(上)
    用OpenCv-Python自带的LBPH识别器实现简单人脸识别(上)引言:本文开发环境为:Windows10+phchram+Anaconda5.2(Python3.6)+Opencv4.5.5,用opencv-contrib原生的API完成了人脸识别的功能,其可以任意添加人脸ID数据,但其效果比较差(勉强能用),如果日后有时间的话,给大家出一期(挖坑)利......
  • 用OpenCv-Python自带的LBPH识别器实现简单人脸识别(下)
    介绍本文附录了通过LBPH实现简单人脸识别的源代码,分类效果并不是很好,供个人学习使用。人脸录入.pyimportcv2cap=cv2.VideoCapture(0)flag=1num=0while(cap.isOpened()):ret_flag,Vshow=cap.read()cv2.imshow("Capture_Test",Vshow)k=cv2.w......
  • SSM使用Druid数据源出现循环报错
    解决方法在数据库连接配置db.properties文件中的属性前增加前缀xml配置<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><propertyname="username"value="${jdbc.username}"/>......
  • flask基本使用/路由/配置/
    python主流web框架web框架的本质都是一样的django大而全内置的app很多,第三方支持的app也很多flask小而精没有过多的内置组件只完成web框架最基本的功能,需要借助于第三方,完成更丰富的功能fastapi异步的web框架,接口支持的并发更高,近两年很火,很多人使用https://fast......
  • scapy模块基础使用
    一、安装scapy:完整安装,会安装ipython和scapy等模块,命令如下:pipinstall--prescapy[complete] python导入scapy使用下面语句:fromscapy.allimport* 一些工具、方法和用途:summary() 显示一个关于每个数据包的摘要列表nsummary() 同上,但规定了数据包数量conversations()......
  • VUE分别使用普通方法、计算属性、监听器完成简易计算器
    计算器功能:1.加减乘除模可以随意切换使用表单元素<seclect>2.当输入框中数字改变时实时得出运算结果方法1:v-model绑定input框的值,绑定input键盘按下和鼠标点击时触发自定义方法getResult,该方法用来计算表达式的值。方法2:使用computed计算属性方法3:使用watch侦听属性3.可以使......
  • junit 使用stub进行粗粒度测试
    测试背景:1.程序要以http连接到第三方的web服务器上。2.功能依赖于其他人员开发的模块。。。但其他模块尚未完成,需要用仿造系统来替代。通常有两种策略来生成模拟对象。stub技术和mockobjects 一、stub简介stub是一种机制,用来模拟真实代码 或者尚未完成的代码。......
  • 使用 SK 示例 探索 GitHub 存储库 中的机器人
    微软3月22日一篇文章“Semantic-kernel嵌入和记忆:使用聊天UI探索GitHubRepos”[1],文章中进行了展示了嵌入,该文章解释了他们如何帮助开发人员提出有关GitHub存储库的问题或使用自然语言查询探索GitHub存储库。与嵌入一起,这是在SK存储器[2](嵌入集合)的帮助下完成的,这有助于为提......
  • 使用 MybatisPlusCore 自带的雪花算法生成不重复数字
    这里不介绍雪花算法的实现原理,可以自行搜索查阅网上的资料。这里主要介绍雪花算法的使用场景,如何调用第三方类库MybatisPlusCore自带的方法来使用雪花算法。雪花算法的主要使用场景,就是生成不重复的数字,作为数据库表的主键使用。你可能会使用uuid作为主键,但是其占用16个......