一、seleinum八大元素定位
前言:网上百度还是老版的元素定位方法,但是对于新版Python来说,已经弃用了之前的元素定位方法,所以在使用的时候会发现有报错,会被一条横线划掉。重新整理了一下目前使用的元素定位方法:
driver.find_element(By.‘方式’, “xxx”)
1、id定位:find_element(By.ID,“kw”)
在html中元素的id是唯一的。
driver.find_element(By.ID,"kw").send_keys('大鸡排')
2.name定位:find_element(By.NAME,“su”)
在html中元素的name不是唯一的,是可以重复的。如果存在多个相同属性,那么默认定位到的是第一个。
3.class_name定位:find_element(By.CLASS_NAME,“XXX”)
driver.findElement(By.className("btn self-btn bg s_btn"));
4.tagname定位
driver.findElement(By.tagName("s_top_wrap"));
5.linkText定位,即使用超链接的文本内容定位
driver.findElement(By.linkText("设为首页"));
6.partialLinkText定位,即使用超链接的部分文本内容定位
driver.findElement(By.partialLinkText("为首页"));
7.xpath定位
比如 //input[@id=“su” and @value=“百度一下”]
//input[@id="su" and @value="百度一下"]
8.css定位
CSS定位要比xpath定位速度快,css选择器语法非常强大。
二、元素操作方法
方法:
1、.send_keys() # 输入方法
2、.click() # 点击方法
3、.clear() # 清空方法
# 导包
from time import sleep
from selenium import webdriver
# 实例化浏览器
driver = webdriver.Chrome()
# 打开网址
driver.get('https://www.baidu.com/')
# 需求
ele = driver.find_element_by_css_selector('#kw')
ele.send_keys('易烊千玺')
sleep(2)
# 清空
ele.clear()
ele.send_keys('王嘉尔')
# 时间轴看效果
sleep(3)
# 关闭页面
driver.quit()
三、浏览器操作方法
方法
“”"
1、driver.maximize_window() # 最大化浏览器
2、driver.set_window_size(w,h) # 设置浏览器大小 单位像素
3、driver.set_window_position(x,y) # 设置浏览器位置
4、driver.back() # 后退操作
5、driver.forward() # 前进操作
6、driver.refrensh() # 刷新操作
7、driver.close() # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
8、driver.quit() # 关闭driver对象启动的全部页面
9、driver.title # 获取当前页面title信息
10、driver.current_url # 获取当前页面url信息
“”"
四、鼠标操作 (需要实例化鼠标对象)
1.实例化鼠标
self.action = ActionChains(self.driver)
2.鼠标事件常用的操作
"""
1、context_click(element) # 右击
2、double_click(element) #双击
3、double_and_drop(source, target) # 拖拽
4、move_to_element(element) # 悬停 【重点】
5、perform() # 执行以上事件的方法 【重点】
"""
五、切换frame
1、应用场景:
处于frame 中的元素,虽然可以获取元素信息,但是代码执行时无法定位元素,因此需要先切换到frame,再进行元素定位操作。
2.如何切换frame
方法:driver.switch_to.frame(“id/name/element”) 传入的是代表frame唯一的特征值
class TestCase(object):
def setup(self):
path = Service(executable_path="../chromedriver")
"""创建浏览器对象"""
self.driver = webdriver.Chrome(service=path)
"""获取qq音乐网址"""
self.driver.get("https://y.qq.com/")
self.driver.maximize_window()
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_frame(self):
self.driver.find_element(By.XPATH, '//*[@class="top_login__link"]').click()
sleep(2)
iframe = self.driver.find_element(By.XPATH, '//div[@class="login-box-bd__item current"]/iframe')
self.driver.switch_to.frame(iframe)
iframe1 = self.driver.find_element(By.XPATH, '//div[@class="lay_login_form"]/iframe')
self.driver.switch_to.frame(iframe1)
self.driver.find_element(By.ID, "switcher_plogin").click()
sleep(2)
element = self.driver.find_element(By.ID, 'u')
element.send_keys("157341347654")
element = self.driver.find_element(By.ID, 'p')
element.send_keys("123456")
sleep(5)
self.driver.find_element(By.ID, "login_button").click()
sleep(2)
六、多窗口切换、句柄操作
1、为什么要切换多窗口
页面是存在多窗口的,但是selenium默认焦点只会在主窗口上的所有元素,不切换窗口,就不能操作除主窗口以外的窗口内元素。
2、如何切换
每个窗口都有唯一的一个句柄值,那么我们就可以通过句柄值来完成窗口的切换操作
方法:
1、driver.current_window_handle (获取当前的句柄值)
2、driver.window_handles ( 获取当前由driver启动所有窗口句柄)
3、driver.switch_to.window(handle) —> 切换窗口