Selenium 常用方法

Selenium 常用方法

selenium 的常用方法都是和页面元素打交道的。元素定位是在页面上定位到元素,方法则是对这些元素做一些操作。

1 基本方法

1.1 send_keys()

类似于模拟键盘输入。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

# 启动谷歌浏览器
driver = webdriver.Chrome()
# 访问百度首页
driver.get("https://www.baidu.com")
# 找到input框
elem = driver.find_element(By.XPATH, "//input[@name='wd']")
# 输入字符
elem.send_keys("python")
# 回车
elem.send_keys(Keys.RETURN)
time.sleep(3)

1.2 text()

text方法用于获取文本,也就是a标签之间的文字。

elem = driver.find_element(By.LINK_TEXT, "贴吧")
print(elem.text)

1.3 get_attribute()

获取属性值。

elem = driver.find_element(By.TAG_NAME, "input")
print(elem.get_attribute("name"))

1.4 maximize_window()

最大化浏览器窗口。

driver.maximize_window()

1.5 current_window_handle()

获取当前窗口句柄

driver.current_window_handle
# 864BA5163AA8602EAF5123942319BBFA

1.6 current_url()

获取当前窗口url

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
elem = driver.find_element(By.XPATH, "//input[@name='wd']")
elem.send_keys("python")
elem.send_keys(Keys.ENTER)
print(driver.current_url)

1.7 is_selected()

判断元素是否被选择,一般用于选择框。

# 返回 True 或 False
driver.find_element(By.TAG_NAME, "select").is_selected()

1.8 is_enabled()

判断元素是否可用

# 返回 True 或 False
driver.find_element(By.TAG_NAME, "select").is_enabled()

1.9 is_displayed()

判断元素在页面中是否显示

driver.find_element(By.TAG_NAME, "select").is_displayed()

1.10 clear()

清除输入框内的内容。

elem = driver.find_element(By.XPATH, "//input[@name='wd']")
elem.clear()

1.11 quit()

关闭浏览器并杀掉 chromedriver.exe 进程。

1.12 title()

获取页面 title。一般在html文件中都有title标签。

driver.title

1.13 refresh()

刷新页面

driver.refresh()

1.14 back()

浏览器工具栏向后操作,一般是回到上一个页面

1.15 forward()

浏览器工具栏向前操作

2 特殊元素定位

2.1 鼠标悬停操作

在 selenium 中,键盘鼠标的操作封装在 ActionChains类中。该类的主要使用场景为 单击、双击、拖拽等。

  • click(on_element=None), 模拟鼠标单击
  • click_and_hold(on_element=None),模拟鼠标单击并且按住不放
  • double_click(on_element=None), 模拟鼠标双击
  • context_click(on_element=None),模拟鼠标右击操作
  • drag_and_drop(source, target),模拟鼠标拖拽
  • key_down(value, element=None),模拟按住某个键,实现快捷键操作
  • key_up(value, element=None),模拟松开某个键,一般和key_down一起使用
  • move_to_element(to_element), 模拟将鼠标移动到指定的某个页面元素
  • move_to_element_with_offset(to_element, xoffset, yoffset), 移动鼠标至指定的坐标
  • perform(),将之前一系列的 ActionChains 执行
  • release(on_element=None),释放按下的鼠标
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
elem = driver.find_element(By.LINK_TEXT, "网盘")
action = ActionChains(driver)
action.move_to_element(elem).perform()

2.2 select 操作

selenium 提供了处理下拉框 select元素的方法,可以处理 select 标签。

1)select_by_index 方式
有的元素需要触发某些事件才会生成。所以我们也需要将显示select下拉框之前的操作也实现,包括移动鼠标、单击鼠标等。

se = driver.find_element(By.ID, "nr")
Select(se).select_by_index(1) # 按索引选择

2)select_by_value 方式

se = driver.find_element(By.ID, "nr")
Select(se).select_by_value ("20") # 按value值选择

3)select_by_visible_text 方式

se = driver.find_element(By.ID, "nr")
Select(se).select_by_visible_text ("每页显示20条") # 按显示的选项的文本取值

selenium 对返回选项 options 的信息,也提供了3中常用的方法。

1)options,返回 select 所有的选项

se = driver.find_element(By.ID, "nr")
Select(se).options

2)all_selected_options,返回 select 下拉框中已经选中的选项

se = driver.find_element(By.ID, "nr")
Select(se).all_selected_options

3)first_selected_option,返回第一个被选中的选项

se = driver.find_element(By.ID, "nr")
Select(se).first_selected_option

4)取消所有的选择

select.deselect_all()

2.3 alert 弹窗

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.runoob.com/try/try.php?filename=tryjs_alert")
driver.switch_to.frame("iframeResult")
# 触发弹窗
driver.find_element(By.CSS_SELECTOR, "input[value='显示警告框']").click()
# 获取弹窗对象
alert = driver.switch_to.alert
# 点击确定
alert.accept()
# 点击取消
alert.dismiss()
# 如果弹窗中有input框,则输入内容
alert.send_keys("sss") 
time.sleep(5)
driver.quit()

2.4 利用 js 操作页面元素

webdriver 对部分浏览器上控件并不是直接支持的,比如说右侧滚动条。这就需要借助js来间接操作。webdriver 提供了 execute_script()和execute_async_script() 两张方式来执行 js 代码

1) execute_script()
同步执行,适合执行时间较短的js。webdriver 会等待执行结果,然后继续执行后续代码。

2)execute_async_script()
异步执行,通常执行时间比较长的js。webdriver 不需要等待执行结果,直接执行后续代码。

# 获取输入框并填值
js = "document.getElementById('kw').value='selenium'"
driver.execute_script(js)
window.scrollTo(100, 200) // 滚动条滑到指定的位置
window.scrollTo(0, document.body.scrollHeight) // 滑到底部

2.5 利用 jQuery 操作页面元素

# 获取输入框并填值
jq = "$('#kw').val('selenium')"
driver.execute_script(jq)
jq = "$('#su').click()"
driver.execute_script(jq)

2.6 常用的鼠标事件

ActionChains(driver).move_to_element(elem).perform()
ActionChains(driver).context_click(elem).perform()
ActionChains(driver).double_click(elem).perform()
ActionChains(driver).drag_and_drop(elem01, elem02).perform()

2.7 常用的键盘事件

Keys.BACK_SPACE: 删除键
Keys.SPACE: 空格键
Keys.TAB: Tab键
Keys.ESCAPE: 回退键
Keys.ENTER: 回车键
Keys.CONTROL, "a": 组合键 ctrl + A
Keys.CONTROL, "x": 组合键 ctrl + X
Keys.CONTROL, "v": 组合键 ctrl + V
Keys.CONTROL, "c": 组合键 ctrl + C
Keys.F1: F1 键
Keys.F12: F12 键

3 Frame 操作

frame 标签有 Frameset、Frame和IFrame 三种。Frameset 可以直接定位。 Frame 和 iFrame 的定位方法相同,需要先切换到 Frame 内再进行操作。

# 切换到name为 login_frame 的Frame内
driver.switch_to.frame("login_frame") 
# 切换到内部后,只能对Frame内部元素进行操作,如果需要对Frame之外的元素进行操作,则需要返回驱动
driver.switch_to.default_content() 
# 通过 index 定位, 0 表示第一个的意思
driver.switch_to.frame(0)
# 通过 IFrame name属性定位
driver.switch_to.frame("login_frame")
# 通过 WebElement 对象模式,也就是用 find_element 方法获取元素对象
driver.switch_to.frame(driver.find_element(By.ID, "login_frame"))

4 上传附件

如果是 input 类型的标签,并且 type 值为 “file”, 那么直接通过 send_keys 的方式来绕过弹出框操作,直接将文件路径信息传递给"添加附件"按钮

driver.find_element(By.NAME, 'UploadFile').send_keys("真实文件路径")

5 cookie

webdriver 提供了以下方法来操作 cookie
11
22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值