使用的Python版本为3.8,selenium版本为4.15.2
Python自动化:selenium常用方法总结
- 1. 三种等待方式
- 2. 浏览器操作
- 3. 8种查找元素的方法
- 4. 高级事件
1. 三种等待方式
- 强制等待
使用模块time下的sleep()实现等待效果 - 隐式等待
使用driver.implicitly_wait()方法,具有全局性,在代码前面设置后,整个程序运行过程中都会有效,都会等待页面加载完成,在执行后续,不需要每次设置一次。
缺点:非要加载整个页面才执行代码,这样影响代码的执行效率。
参考代码:
from selenium import webdriverdriver = webdriver.Chrome()
driver.get(url='')
driver.implicitly_wait(5)
- 显示等待
必须在每个需要等待的元素前面进行声明,明确要等到某个元素的出现或者某个元素的可点击等。 需要用到 :WebDriverWait 和 expected_conditions
参考代码:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECele = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(By.,''))
2. 浏览器操作
driver.maximize_window() # 最大屏幕
driver.minimize_window() # 最小屏幕
driver.quit() # 退出浏览器
driver.close() # 关闭当前页面
driver.set_window_size(width=,height=) # 设置浏览器的大小
driver.set_window_position(x=,y=) # 设置浏览器在电脑上显示的位置
driver.back() # 模拟浏览器后退按钮
driver.forward() # 模拟浏览器前进按钮
driver.refresh() # 刷新当前页面
driver.title # 当前页面的标题
driver.current_url # 当前页面的网址
3. 8种查找元素的方法
- By.XPATH 通用的查找方式
获取百度页面输入框
driver.find_element(By.XPATH,"//input[@id='kw']").send_keys('哈哈')
- By.CLASS_NAME 通过class属性查找
driver.find_element(By.CLASS_NAME,"s_ipt").send_keys('哈哈')
- By.ID 通过id属性查找
driver.find_element(By.ID,"kw").send_keys('哈哈')
- By.CSS_SELECTOR 通过css选择器 会写css样式的就知道
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys('哈哈')
- By.NAME 通过name属性进行查找
driver.find_element(By.NAME,"wd").send_keys('哈哈')
- By.LINK_TEXT 通过链接文本
在百度页面找到贴吧超链接并进入
driver.find_element(By.LINK_TEXT,"贴吧").click()
- By.PARTIAL_LINK_TEXT 部分链接文本
driver.find_element(By.PARTIAL_LINK_TEXT,"贴").click()
- By.TAG_NAME 通过标签元素
4. 高级事件
- 浏览器弹框
# 浏览器弹框driver.switch_to.alert.accept() 确认.dismiss() 取消
- 框架页
driver.switch_to.frame()
之所以用到这个,是因为有的页面可能不单单是一个页面,而是通过frame或者iframe标签元素把几个页面组合成一个页面。查找元素时需要注意的是,如果查找的元素不在当前页面下,那么需要找到对应页面,然后使用上述那个方法,跳到这个对应页面下,然后才能找到对应元素。
- 窗口切换
objs = driver.window_handles
# 获取当前的窗口对象 列表
driver.switch_to.window(objs[1])
# 下标从0开始
4 . 滑块验证
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get(url='file:///D:/Sublime/vscode/Test/%E6%BB%91%E5%9D%97%E6%B5%8B%E8%AF%95/%E6%BB%91%E5%8A%A8%E9%AA%8C%E8%AF%81.html')
driver.maximize_window()
ele = driver.find_element(By.XPATH,"//div[@class='slider']")
# 滑块元素
ac = ActionChains(driver)
ac.click_and_hold(ele).move_by_offset(300,0).perform()
# 鼠标点击 握住 向右移动300像素
ac.release()
# 释放
运行结果:
【注】:还有很多高级操作,这里只是总结最基础的而已。