selenium基础
selenium
1.元素定位
1.1单个元素定位(8种)
#id,class_name,name,css,xpath,link_text,partial_link_text,tag_name
#link_text:以超链接的全部名字作为关键字来定位
#partial_link_text:以超链接的部分名字作为关键字来定位(首字符就可定位到)
#tag_name:以标签名称定位
import time
from selenium import webdriver
driver=webdriver.Firefox()
url='http://www.baidu.com'
driver.get(url)
driver.find_element_by_id('kw').send_keys('id')
time.sleep(5)
driver.find_element_by_name('wd').send_keys('name')
time.sleep(5)
driver.find_element_by_class_name('s_ipt').send_keys('class_name')
time.sleep(5)
driver.find_element_by_xpath("//input[@id='kw']").send_keys('xpath')
time.sleep(5)
driver.find_element_by_css_selector("#kw").send_keys('css')
time.sleep(5)
driver.quit()
1.2多个元素定位
使用索引【x】
1.3使用By类定位
from selenium import webdriver
from selenium.webdriver.common import By
driver=webdriver.Firefox()
url="http://www.baidu.com"
driver.get(url)
driver.find_element(By.ID,'kw').send_keys('ByID')
driver.find_element(By.ID,'kw').click()
1.4使用JavaScript定位
getElementsByTagName(),
getElementsByID(),
getElementsByClassName(),
getElementsByName(),
document.querySelectorAll()
from selenium import webdriver
import time
driver=webdriver.Firefox()
url='https://www.jianshu.com/sign_in'
driver.get(url)
time.sleep(3)
js_input='document.getElementsByTagName("input")[2].value="username";'
#execute_script()调用js方法执行JS脚本
driver.execute_script(js_input)
#js_register='document.getElementById("js-sign-up-btn").click()'
#driver.execute_script(js_register)
time.sleep(5)
1.5使用jQuery定位
jQuery定位同一用:document.querySelectorAll(),返回一个list对象
#css选择器
css_btn='document.querySelectorAll(".sign=in=button")[0].click();'
driver.execute_script(css_btn)
2.定位下拉框
2.1select类
select类提供三种方式:value,text,index
2.1.1 value属性定位
element=driver.find_element(By.ID,‘s1’)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
driver=webdriver.Firefox()
url=''
driver.get(url)
element=driver.find_element(By.ID,'s1')
Select(element).select_by_value('01')
2.1.2 text属性定位
Select(element).select_by_visible_text('第一个')
2.1.3 index属性定位
索引下表从0开始
Select(element).select_by_index(0)
2.2元素二次定位
driver.find_element_by_id('s1').find_element_by_xpath('//*[@id="id1"]').click()
元素二次定位操作下拉框内元素,必须增加click()单击事件才会生效
3.鼠标操作
3.1鼠标指针悬停
使用link_text定位到‘设置’按钮,使用move_to_element()方法将鼠标指针悬停到某个元素上面。perform()用于执行所有的动作
setting=driver.find_element_by_link_text(‘设置’)
ActionChains(driver).move_to_element(setting).perform()
from selenium import webdriver
from time import sleep
#导入 ActionChains类
from selenium.webdriver import ActionChains
driver=webdriver.Firefox()
url='http://www.baidu.com'
driver.get(url)
setting=driver.find_element_by_link_text('设置')
ActionChains(driver).move_to_element(setting).perform()
sleep(5)
driver.find_element_by_link_text('搜索设置').click()
sleep(5)
3.2鼠标右键
先定位到要右击的元素,然后通过context_click()方法执行鼠标右键操作
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Firefox()
url='http://www.baidu.com'
driver.get(url)
sleep(5)
#定位到‘百度一下’按钮元素
context=driver.find_element_by_id('su')
#模拟鼠标右键操作
ActionChains(driver).context_click(context).perform()
sleep(5)
3.3鼠标双击
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Firefox()
url='http://www.baidu.com'
driver.get(url)
sleep(5)
driver.find_element_by_id('kw').send_keys('双击666')
sleep(5)
element=driver.find_element_by_id('su')
#模拟鼠标双击操作
ActionChains(driver).double_click(element).perform()
sleep(3)
4.元素等待
4.1强制等待
import time
time.sleep(5)
4.2隐式等待
driver.implicitly_wait(30):在规定的时间范围内,浏览器不停刷新页面,直到找到目标元素。如果找不到,抛异常。默认是0
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
url='http://www.baidu.com'
driver.get(url)
driver.implicitly_wait(30)
driver.find_element_by_id('kw').send_keys('老铁')
4.3显式等待
等待某个元素的出现,或元素可单击,如果等不到就一直等下去。在规定时间内找不到抛异常
WebDriverWait()显式等待类,driver代表驱动,5代表最长超时时间,0.5表示每隔0.5就检测元素是否存在。
until():表示在等待期间,每隔一段时间调用传入的方法,直到为True.
EC.presence_of_all_elements_located():表示只要有一个符合条件的元素加载出来就通过。
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Firefox()
driver.get('https://mail.sina.com.cn/')
element=WebDriverWait(driver,5,0.5).until(EC.presence_of_all_elements_located((By.ID,'freename')))
element.send_keys('hello')
sleep(5)
driver.quit()
5.表单切换
页面存在iframe标签
5.1单表单切换
from time import sleep
from selenium import webdriver
driver=webdriver.Firefox()
driver.get('https://mail.qq.com.cn/cgi-bin/loginpage')
sleep(5)
driver.switch_to_frame('login_frame')#切换iframe标签
driver.find_element_by_name('email').send_keys('username')
driver.find_element_by_name('password').send_keys('password')
driver.find_element_by_id('login_button').click()
driver.switch_to.default_content()#退出iframe标签
5.2嵌套表单切换
from time import sleep
from selenium import webdriver
driver=webdriver.Firefox()
driver.get('https://mail.qq.com.cn/cgi-bin/loginpage')
sleep(5)
#切换到外层iframe标签
driver.switch_to_frame('f1')
#在切换到内层iframe标签
driver.switch_to_frame('f2')
driver.find_element_by_name('email').send_keys('username')
driver.switch_to.default_content()
#退出iframe标签
#无论进入几层iframe标签,执行一次退出操作,就回到最外层
5.3平行表单切换
from time import sleep
from selenium import webdriver
driver=webdriver.Firefox()
driver.get('https://mail.qq.com.cn/cgi-bin/loginpage')
sleep(5)
#进入iframe1标签
driver.switch_to_frame('f1')
#退出iframe1标签
driver.switch_to.default_content()
#进入iframe2标签
driver.switch_to_frame('f2')
driver.find_element_by_name('email').send_keys('username')
#退出iframe2标签
driver.switch_to.default_content()
5.4表单特殊情况处理
当iframe标签本身id,name,属性值是一连串动态变化的字符串或没有可用的属性,可间接定位iframe标签。
6.窗口切换
6.1GET方法
driver.get('https://mail.qq.com.cn/cgi-bin/loginpage')
6.2switch方法
使用window_handles获取所有窗口,返回一个list对象,通过switch_to.window(window[index])方法切换指定窗口。索引下标从0开始
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver=webdriver.Firefox()
url='https://www.so.com/'
driver.get(url)
sleep(2)
driver.find_element_by_link_text('360导航').click()
sleep(2)
#获得所有窗口
windows=driver.window_handles
driver.switch_to_window(windows[1])
sleep(1)
driver.find_element_by_id('search-kw').send_keys('第二个窗口')
sleep(2)
driver.switch_to_window(windows[0])
driver.find_element_by_id('input').send_keys('第一个窗口')
7.警告框
使用switch_to.alert.text()方法获取警告框对应的文本信息
使用switch_to.alert.accept()方法接收警告框,等同于确认操作
使用switch_to.alert.dismiss()方法取消警告框,等同于取消操作
8.JavaScript
8.1处理富文本
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get('http://localhost:8080')
#定位富文本,并向富文本中输入内容A
js='document.getElementByID("content_ifr").contentWindow.document.body.innerHTML="%s"' % (A)
driver.execute_script(js)
8.2处理隐藏元素
隐藏元素是指:style=“dispaly:none;”
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from time import sleep
driver=webdriver.Firefox()
url=''
driver.get(url)
sleep(5)
#设置隐藏元素为可见
js='document.querySelectorAll("select")[0].style.dispaly="block";'
driver.execute_script(js)
sleep(4)
element=driver.find_element(By.ID,'s3')
Select(element).select_by_visible_text('po设计模式')
8.3处理readonly属性
元素本身有readonly属性时,使用js语法移除readonly属性
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
url=''
driver.get(url)
sleep(5)
#移除readonly属性
js1='document.getElementByID("train_date").removeAttribute("readonly");'
driver.execute_script(js1)
sleep(2)
driver.find_element_by_id('train_date').clear()#清空日期
driver.find_element_by_id('train_date').send_keys('2020-07-06')#输入最新日期
8.4处理浏览器滚动条
window.scrollTo(0,10000):表示以像素为单位,0代表水平滚动条位置,10000代表垂直滚动条位置
driver.execute_script("window.scrollTo(0,10000);")#将页面滚动条拖到底部
driver.execute_script("window.scrollTo(10000,0);")#将页面滚动条拖到顶部
使用键盘keys类下的DOWN,UP方法,只需要指明滚动条滚动的目标位置,在屏幕上的任何一个元素都可
# #导入键盘类
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.maximize_window()
url='http://www.baidu.com'
driver.get(url)
driver.find_element_by_id('kw').send_keys('好看')
driver.find_element_by_id('su').click()
sleep(5)
driver.find_element_by_xpath('//*[@id="page"]/div/a[10]').send_keys(Keys.DOWN)
sleep(5)
driver.find_element_by_xpath('//*[@id="s_tab"]/div/a[9]').send_keys(Keys.UP)
sleep(5)
driver.quit()
9.selenium常用方法
(1)send_keys():模拟键盘输入
driver.find_element_by_id('kw').send_keys('输入内容')
(2)text:获取文本值
driver.find_element_by_link_text('百度一下').text
(3)get_attribute():获取属性值
driver.find_element_by_id('kw').get_attribute('value')
(4)maximize_window():实现浏览器窗口最大化
driver.maximize_window()
(5)current_window_handle:返回标识窗口的字符串
driver.current_window_handle
(6)current_url:获取当前窗口url
driver.current_url
(7)is_selected():判断元素是否被选择(多用于选择框)
driver.find_element_by_id('kw').is_selected()
(8)is_displayed():判断元素是否显示,显示返回True,否则返回False
driver.find_element_by_id('kw').is_displayed()
(9)is_enabled():判断元素是否可用,可用返回True,否则返回False
driver.find_element_by_id('kw').is_enabled()
(10)quit():退出
driver.quit()
(11)clear()
driver.clear()
(12)title:获取页面title
driver.title
(13)refresh():刷新页面(F5)
driver.refresh()
(14)back():后退
driver.back()
(15)forward():前进
driver.forward()
本文地址:https://blog.csdn.net/weixin_44679200/article/details/109241775