ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

6.8__selenium实战(3)

2022-06-08 19:31:19  阅读:185  来源: 互联网

标签:__ webdriver lj selenium sleep BC% import 6.8


一、定位文本框,密码框

a. 先使用web元素定位方法定位文本框,密码框,再使用send_keys()方法进行文本, 密码输入 案例:

网站:http://cms.duoceshi.cn/cms/manage/login.do

 

 案例:

from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj="http://cms.duoceshi.cn/cms/manage/login.do"
d.get(lj)
sleep(2)
d.maximize_window()
d.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
d.find_element_by_id('loginPwd').send_keys("123456")




二、定位普通按钮,链接,隐藏框
案例1:按钮
网站:http://cms.duoceshi.cn/cms/manage/login.do

 

 

from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj="http://cms.duoceshi.cn/cms/manage/login.do"
d.get(lj)
sleep(2)
d.maximize_window()
d.find_element_by_id("userAccount").send_keys("admin")#账号
sleep(2)
d.find_element_by_id('loginPwd').send_keys("123456") #密码
sleep(2)
d.find_element_by_id("loginBtn").click() #点击登录

案例2:链接
网站:https://www.baidu.com/

 

 

from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/"
d.get(lj)
sleep(2)
d.find_element_by_link_text("hao123").click()

案例3:隐藏框
场景1:悬停


快捷键:ctrl+shift+c 查看隐藏元素

 

备注:

导入:from selenium.webdriver.common.action_chains import  ActionChains 模块
ActionChains(对象).move_to_element(位置).perform()

 案例:悬停

from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/"
d.get(lj)
sleep(2)
gd=d.find_element_by_link_text("更多")
ActionChains(d).move_to_element(gd).perform()
sleep(2)
d.find_element_by_link_text("百科").click()

场景2:百度中设置的的隐藏框
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/"
d.get(lj)
sleep(2)
d.find_element_by_id("s-usersetting-top").click()
sleep(2)
d.find_element_by_link_text("高级搜索").click()

======================================================
获取元素的文本 text 文本 方法:先使用web元素定位方法定位元素,再使用text获取文本 案例:百度:

 

 

from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/"
d.get(lj)
sleep(2)
wb=d.find_element_by_id("s-top-loginbtn").text
# print(wb)
if wb=="登录":
print("ok")
else:
print('no')




========================================
   title    获取窗口title
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/"
d.get(lj)
sleep(2)
print(d.title) #百度一下,你就知道
lj1="http://cms.duoceshi.cn/cms/manage/login.do"
d.get(lj1)
sleep(2)
print(d.title) #过期更新
========================================
判断语句:

(1)if语句
无论是对,还是错,我们都有结果;
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/"
d.get(lj)
wb=d.find_element_by_id("s-top-loginbtn").text
# print(wb)
if wb=="登录111":
print("ok")
else:
print('no')

 



(2)assert 语句
错误就报错,对了就继续执行语句
案例:
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/"
d.get(lj)
wb=d.find_element_by_id("s-top-loginbtn").text
# assert wb=="登录"#正确的直接执行下一步
assert wb=="不登录" #错误直接报错
print(wb)

 

 =======================================

切换窗口 场景一:同一个浏览器,同一个窗口
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/" #百度
d.get(lj)
sleep(2)
lj1="https://www.jd.com/" #京东
d.get(lj1)
print(d.title) #京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!


场景2:同一个浏览器,不同的窗口,抬头在第一个窗口
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/" #百度
d.get(lj)
sleep(2)
lj2="window.open('https://www.jd.com/')"
d.execute_script(lj2)
sleep(2)
print(d.title) #百度一下,你就知道

场景3:两个窗口 通过切换句柄来切换窗口(0,1)
案例:
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/" #百度
d.get(lj)
sleep(2)
lj2="window.open('https://www.jd.com/')"
d.execute_script(lj2)
sleep(2)
print(d.title) #百度一下,你就知道
jb=d.current_window_handle #获取当前句柄
print(jb) #CDwindow-A07BEFCE50143218D8B0CA73029B6017
syjb=d.window_handles #所有的句柄
print(syjb) #['CDwindow-A07BEFCE50143218D8B0CA73029B6017', 'CDwindow-09751853A8EE8EB193CF676122E6CD64']
d.switch_to.window(syjb[1])
sleep(2)
print(d.title) #京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!
d.find_element_by_link_text("你好,请登录").click()

案例4:三个窗口 通过切换句柄来切换窗口(0,2,1)
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/" #百度
d.get(lj)
sleep(2)
lj2="window.open('https://www.jd.com/')"
d.execute_script(lj2)
sleep(2)
lj3="window.open('https://i.cnblogs.com/posts')"
d.execute_script(lj3)
print(d.title) #百度一下,你就知道
jb=d.current_window_handle #获取当前句柄
print(jb) #CDwindow-A07BEFCE50143218D8B0CA73029B6017
syjb=d.window_handles #所有的句柄
print(syjb) #['CDwindow-A07BEFCE50143218D8B0CA73029B6017', 'CDwindow-09751853A8EE8EB193CF676122E6CD64']
d.switch_to.window(syjb[2])
sleep(2)
print(d.title) #京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!
# d.find_element_by_link_text("你好,请登录").click()

案例5:通过if语句判断 title 来切换窗口
from   selenium  import  webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
d=webdriver.Chrome()
lj="https://www.baidu.com/" #百度
d.get(lj)
sleep(2)
lj2="window.open('https://www.jd.com/')"
d.execute_script(lj2)
sleep(2)
lj3="window.open('https://i.cnblogs.com/posts')"
d.execute_script(lj3)
print(d.title) #百度一下,你就知道
jb=d.current_window_handle #获取当前句柄
print(jb) #CDwindow-A07BEFCE50143218D8B0CA73029B6017
syjb=d.window_handles #所有的句柄
print(syjb) #['CDwindow-A07BEFCE50143218D8B0CA73029B6017', 'CDwindow-09751853A8EE8EB193CF676122E6CD64']
for i in syjb:
d.switch_to.window(i)
if "博客园" in d.title:
break
print(d.title)

======================================
获取下拉框选项 引入类:Select() from selenium.webdriver.support.select import Select 实战网址:https://www.ctrip.com/ 1)select_by_index() #通过下标定位下拉选项 2)select_by_value() #通过value属性值定位下拉选项 3)select_by_visible_text() #通过下拉文本内容内容   案例:
路径:
file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/table.html
from   selenium  import  webdriver
from time import sleep
from selenium.webdriver.support.ui import Select
d=webdriver.Chrome()
lj2="file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/table.html"
d.get(lj2)
sleep(2)
wz=d.find_element_by_xpath("/html/body/form/table/tbody/tr[7]/td[2]/select")
# Select(wz).select_by_visible_text("清华大学")#文本值定位
Select(wz).select_by_index(2) #根据索引定位
Select(wz).select_by_value("1") #根据calue定位
 
======================================
15、弹框处理 三种弹框的处理方法:警告型,确认型,输入型弹框 t = driver.switch_to.alert() #切换进入alert()弹框 t.text() # 获取弹框的上面的文本 t.accept() #点击确定按钮 t.dismiss() #点击取消按钮 send_keys() #输入型弹框可以在弹框上面进行文本输入   案例: (1)路径:alert弹框file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/alert%E5%BC%B9%E6%A1%86.html
案例:from   selenium  import  webdriver
from  time  import sleep
d=webdriver.Chrome()
lj="file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/alert%E5%BC%B9%E6%A1%86.html"
d.get(lj)
sleep(2)
tk=d.switch_to.alert
sleep(2)
tk.accept()# 确定
# tk.dismiss()# 取消
(2)确认型弹框

:路径file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/enter.html
from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj="file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/enter.html"
d.get(lj)
sleep(2)
d.find_element_by_class_name("alert").click()
sleep(2)
tk=d.switch_to.alert
sleep(2)
tk.accept()# 确定
# tk.dismiss()# 取消
(3)输入型弹框

路径:
file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/prompt.html
from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj="file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/prompt.html"
d.get(lj)
sleep(2)
d.find_element_by_class_name("alert").click()
sleep(2)
tk=d.switch_to.alert
sleep(2)
tk.send_keys("dcs")
sleep(2)
tk.accept()# 确定

(4)上传文件型弹框
file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/upload_file.html
from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj="file:///E:/dcs/two/selenium%EF%BC%888%EF%BC%89/html%E5%BC%B9%E6%A1%86/upload_file.html"
d.get(lj)
sleep(2)
d.find_element_by_id("file").send_keys(r"D:\f\yy\ss.xlsx")
=====================================
iframe框处理 定位的元素在iframe标签里面,需要先进入iframe,再进行元素定位 进入iframe框方法:switch_to.frame() 退出iframe框方法:switch_to.default_content() 案例1:
路径:https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&state=DC2EB102167EB90DAC5CF600E5C3E26BE8DB735314DE524CBA25757F99D656D8CF7CDC1BAF60ABBABD53344020B76C27&client_id=100273020&redirect_uri=https%3A%2F%2Fqq.jd.com%2Fnew%2Fqq%2Fcallback.action%3Fview%3Dnull%26uuid%3D246fff3fc6dc46daa0a1cf09e8e61a4d  

 

案例:

from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj="https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&state=DC2EB102167EB90DAC5CF600E5C3E26BE8DB735314DE524CBA25757F99D656D8CF7CDC1BAF60ABBABD53344020B76C27&client_id=100273020&redirect_uri=https%3A%2F%2Fqq.jd.com%2Fnew%2Fqq%2Fcallback.action%3Fview%3Dnull%26uuid%3D246fff3fc6dc46daa0a1cf09e8e61a4d"
d.get(lj)
sleep(2)
kdz=d.find_element_by_id("ptlogin_iframe")
d.switch_to.frame(kdz) #进框
sleep(2)
d.find_element_by_link_text("帐号密码登录").click()
d.switch_to.default_content() #退框
sleep(2)
d.find_element_by_link_text("服务协议").click()
=====================================
滚动条是由js代码编写的 方法:execute_script() 代码如下: js1=window.scrollTo(0,20000) #向下滚动20000px driver.execute_script(js1) js2=window.scrollTo(0,0) #从底部滚动到顶部 driver.execute_script(js2)

 

 

  案例:
from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj2="https://www.jd.com/"
d.get(lj2)
d.maximize_window()
sleep(3)
js1='window.scrollTo(0,20000)'
d.execute_script(js1)
sleep(10)
js2='window.scrollTo(0,0)'
d.execute_script(js2)
方法二:js方法滑动
var d=document.documentElement.scrollTop=10000
js2='var d=document.documentElement.scrollTop=0'
from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj2="https://www.jd.com/"
d.get(lj2)
d.maximize_window()
sleep(3)
js1='var d=document.documentElement.scrollTop=10000'
d.execute_script(js1)
sleep(10)
js2='var d=document.documentElement.scrollTop=0'
d.execute_script(js2)

==========================
通过循环滑动屏幕
from   selenium  import  webdriver
from time import sleep
d=webdriver.Chrome()
lj2="https://www.jd.com/"
d.get(lj2)
d.maximize_window()
sleep(3)
sum=0
while sum<=10000:
sum+=1000
js1='var d=document.documentElement.scrollTop='+str(sum)
d.execute_script(js1)
sleep(10)
==================================================
Keys类 from selenium.webdriver.common.keys import Keys 删除单个字符:Keys.BACK_SPACE 全选:Keys.CONTROL,'a' 剪切:Keys.CONTROL,'x' 粘贴:Keys.CONTROL,'v' 点击确定:Keys.ENTER 进阶:可以把相同的步骤封装在一个函数里面
案例:
from   selenium  import  webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
d=webdriver.Chrome()
lj2="https://www.baidu.com/"
d.get(lj2)
d.maximize_window()
sleep(2)
d.find_element_by_id("kw").send_keys("dcs") #输入
sleep(2)
d.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")#全选
sleep(2)
d.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")#剪切
sleep(2)
d.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")#粘贴
sleep(2)
d.find_element_by_id("kw").send_keys(Keys.ENTER)#确认

 

==================================================
封装
from   selenium  import  webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
d=webdriver.Chrome()
lj2="https://www.baidu.com/"
d.get(lj2)
d.maximize_window()
sleep(2)
def ff(lj,*v):
d.find_element_by_id(lj).send_keys(*v)
sleep(2)
if __name__ == '__main__':
ff('kw','dcs')
ff('kw',(Keys.CONTROL,"a"))
ff('kw', (Keys.CONTROL, "x"))
ff('kw', (Keys.CONTROL, "v"))
ff('kw', (Keys.ENTER))

==================================================

标签:__,webdriver,lj,selenium,sleep,BC%,import,6.8
来源: https://www.cnblogs.com/xukairoot/p/16356856.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有