浏览器常用属性和方法
属性
- driver.name # 当前浏览器的名字
- driver.title # 当前网页的标题
- driver.current_url # 当前网页的 url
- driver.page_source # 当前网页的源码
方法
- driver.close() # 关闭当前窗口
- driver.quit() # 关闭浏览器
- 历史
driver.back() # 历史后退
driver.forward() # 历史前进 - 刷新页面
driver.refresh() # 刷新页面 - 窗口大小位置
driver.maximize_window() # 浏览器最大化
driver.fullscreen_window() # 浏览器全屏
driver.minimize_window() # 浏览器最小化
窗口截图
说明:自动化脚本是由程序去执行的,因此有时候打印的错误信息并不是十分明确。如果在执行出错的时候对当前窗口截图保存,那么通过图片就可以非常直观地看到出错的原因。
在WebDriver类库中,提供了截图方法,我们只需要调用: driver.get_screenshot_as_file(文件路径.png)
from selenium.webdriver import Chrome
driver = Chrome('./chromedriver')
# 3. 打开网址
# file://{本地网址绝对路径}
driver.get('https://www.baidu.com')
driver.maximize_window()
driver.implicitly_wait(2)
# 截图保存
driver.get_screenshot_as_file('error.png')
driver.quit()
执行 javascript 代码
有时候我们需要在特定页面中执行 javascript 脚本,通过 driver.execute_script(js代码)
from selenium.webdriver import Chrome
from selenium.webdriver.support.wait import WebDriverWait
import traceback
import time
# 通过指定chromedriver的路径来实例化driver对象
driver = Chrome('./chromedriver')
# 控制浏览器访问url地址
driver.get('https://www.baidu.com')
# driver.maximize_window() # 最大化窗口
# 执行js代码
driver.execute_script("alert('hello world')")
time.sleep(3) # 延时3s
# 退出浏览器
driver.quit()
cookie
Cookie 相关的方法
- driver.get_cookies() # 获取所有的 cookie
- driver.get_cookie(name) # 获取指定的 cookie
- driver.delete_cookie(name) # 删除指定的 cookie
- driver.delete_all_cookies() # 删除所有的 cookie
- driver.add_cookie(cookie_dict) # 添加一个 cookie cookie_dict {"name":"xxx","value":"xxx"} 可选的 key 是 "path", "domain", "secure", "expiry"
from selenium.webdriver import Chrome
from selenium.webdriver.support.wait import WebDriverWait
import traceback
import time
# 通过指定chromedriver的路径来实例化driver对象
driver = Chrome('./chromedriver')
# 控制浏览器访问url地址
driver.get('http://www.baidu.com')
for cookie in driver.get_cookies():
print("%s -> %s" % (cookie['name'], cookie['value']))
print('================添加 cookie=====================')
driver.add_cookie({"name": "my-cookie", "value": "my-value"})
for cookie in driver.get_cookies():
print("%s -> %s" % (cookie['name'], cookie['value']))
print('================删除 cookie=====================')
driver.delete_cookie('my-cookie')
# print(driver.get_cookies())
for cookie in driver.get_cookies():
print("%s -> %s" % (cookie['name'], cookie['value']))
time.sleep(2)
driver.quit() # 退出浏览器
元素常用属性和方法
模拟鼠标单击
点击元素,通过调用 click() 方法
from selenium.webdriver import Chrome
import traceback
import time
# 通过指定chromedriver的路径来实例化driver对象
driver = Chrome(executable_path='./chromedriver')
# 控制浏览器访问url地址
# file://{本地文件绝对路径}
driver.get('file:///****/test.html') # 打开本地 html 文件
try:
el = driver.find_element_by_id('button')
for i in range(10): # 模拟鼠标单击
el.click()
time.sleep(1)
except Exception:
print(traceback.format_exc())
finally:
# 退出浏览器
driver.quit()
输入框元素填充数据和清空
如果是输入框元素,可以通过 send_keys(字符串) 将该字符串填充到输入框中,通过 clear() 清空输入框
from selenium.webdriver import Chrome
import traceback
import time
# 通过指定chromedriver的路径来实例化driver对象
driver = Chrome(executable_path='./chromedriver')
# 控制浏览器访问url地址
# file://{本地文件绝对路径}
driver.get('file:///****/test.html') # 打开本地 html 文件
try:
el = driver.find_element_by_id('username')
time.sleep(1)
# 填充数据
el.send_keys("我的用户名")
time.sleep(2)
# 清空数据
el.clear()
time.sleep(1)
except Exception:
print(traceback.format_exc())
finally:
# 退出浏览器
driver.quit()
获取标签的属性
html 元素有一些属性,这些属性通过 get_attribute(属性名) 来获取
import time
from selenium.webdriver import Chrome
driver = Chrome('./chromedriver')
driver.get('file://{文件绝对路径}')
el = driver.find_element_by_tag_name('body')
# 获取body里面的内置html属性信息
print(el.get_attribute('innerHTML'))
行为链
WebDriver 中将元素的点击和发送表单数抽象位行为链,行为链中可以包含一个以上的动过,常见行为如下:
- 鼠标单击
- 鼠标右击
- 鼠标双击
- 鼠标拖动
- 鼠标指针移动
- 按键按下
- 按键松开
在实际使用中,通常是组合多个行为来完成一个目标操作,比如:按下 shift --> 按下 a -->松开 a --> 松开 shift
ActionChains的使用
from selenium.webdriver.common.action_chains import ActionChains
使用步骤:
1.实例化 ActionChains
2.通过方法添加要执行的行为,可以添加多个,并且可以链式添加,这一步是保存要执行的行为,并不会执行。例如
3.调用 Actionchains 对象的 perform() 执行上一步添加的行为
from selenium.webdriver import Chrome
import traceback
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
# 通过指定chromedriver的路径来实例化driver对象
driver = Chrome(executable_path='./chromedriver')
# 控制浏览器访问url地址
# file://{本地文件绝对路径}
driver.get('file:///home/python/code/unit_testing/selenium_code/test.html') # 打开本地 html 文件
# 实例化 ActionChains 对象
actions = ActionChains(driver)
try:
# 找到输入框元素
input_el = driver.find_element_by_id('username')
# 鼠标移动到表单元素上-->执行点击-->按下shift-->按下 a -->松开 shift-->松开 a
# 相当于给输入框驶入一个字母 Aa
actions.move_to_element(input_el).click().key_down(Keys.SHIFT).key_down('a').key_up(Keys.SHIFT).key_up('a')
# 执行行为链
actions.perform()
time.sleep(2)
except Exception:
print(traceback.format_exc())
finally:
# 退出浏览器
driver.quit()
方法参考
- reset_actions(self) : 清空行为链
- click(self, on_element=None): 鼠标点击
- click_and_hold(self, on_element=None) : 鼠标按下
- release(self, on_element=None) : 松开鼠标
- context_click(self, on_element=None) : 鼠标右击
- double_click(self, on_element=None) : 鼠标双击
- drag_and_drop(self, source, target) : 拖动元素,source 被拖动元素,target 表示被拖动到那个元素中
- drag_and_drop_by_offset(self, source, xoffset, yoffset) : 拖动元素,给定x,y 轴偏移
- key_down(self, value, element=None) : 按键按下
- key_up(self, value, element=None) : 按键松开
- move_by_offset(self, xoffset, yoffset) : 鼠标箭头移动,给定 x,y 轴偏移
- move_to_element(self, to_element) : 鼠标移动到某个元素中心
- move_to_element_with_offset(self, to_element, xoffset, yoffset) : 鼠标移动到元素内的 x,y 轴位置
- send_keys(self, *keys_to_send): 发送多个按键,也可以是一个字符串
- send_keys_to_element(self, element, *keys_to_send) :
网友评论