欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

selenium基础

程序员文章站 2022-03-07 21:45:38
selenium1.元素定位1.1单个元素定位(8种)#id,class_name,name,css,xpath,link_text,partial_link_text,tag_name#link_text:以超链接的全部名字作为关键字来定位#partial_link_text:以超链接的部分名字作为关键字来定位(首字符就可定位到)#tag_name:以标签名称定位import timefrom selenium import webdriverdriver=webdriver.Fir...

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

相关标签: selenium