本文有原创部分有转载部分,目的是方便自己和各位网友查询使用
侵删!侵删!侵删!侵删!
速查手册
先引入包
import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.options import Options #引入Chrome选项
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
创建实例
command = "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" --remote-debugging-port=9222 --user-data-dir=C:\chrome_profile"
retcode = subprocess.Popen(command,shell=True)
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)
driver方法
先贴出dir()全部方法:
方法名 | 方法名 | 方法名 | 方法名 |
---|---|---|---|
add_cookie | application_cache | back | capabilities |
close | command_executor | create_options | create_web_element |
current_url | current_window_handle | delete_all_cookies | delete_cookie |
desired_capabilities | error_handler | execute | execute_async_script |
execute_cdp_cmd | execute_script | file_detector | file_detector_context |
find_element | find_element_by_class_name | find_element_by_css_selector | find_element_by_id |
find_element_by_link_text | find_element_by_name | find_element_by_partial_link_text | find_element_by_tag_name |
find_element_by_xpath | find_elements | find_elements_by_class_name | find_elements_by_css_selector |
find_elements_by_id | find_elements_by_link_text | find_elements_by_name | find_elements_by_partial_link_text |
find_elements_by_tag_name | find_elements_by_xpath | forward | fullscreen_window |
get | get_cookie | get_cookies | get_log |
get_network_conditions | get_screenshot_as_base64 | get_screenshot_as_file | get_screenshot_as_png |
get_window_position | get_window_rect | get_window_size | implicitly_wait |
launch_app | log_types | maximize_window | minimize_window |
mobile | name | orientation | page_source |
quit | refresh | save_screenshot | service |
session_id | set_network_conditions | set_page_load_timeout | set_script_timeout |
set_window_position | set_window_rect | set_window_size | start_client |
start_session | stop_client | switch_to | switch_to_active_element |
switch_to_alert | switch_to_default_content | switch_to_frame | switch_to_window |
title | w3c | window_handles |
有精力在逐个解释吧…
元素定位速查
定义一个页面中的元素:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
下面是查找多个元素(这些方法将返回一个列表):
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
元素方法
PS:如果需要输入中文,防止编码错误使用send_keys(u"中文用户名")。
完整方法列表可用 dir(element)
来查看
常用操作方法:
- clear 清除元素的内容
- send_keys 模拟按键输入
- click 点击元素
- submit 提交表单
WebElement接口获取值
- size 获取元素的尺寸
- text 获取元素的文本
- get_attribute(name) 获取属性值
- location 获取元素坐标,先找到要获取的元素,再调用该方法
- page_source 返回页面源码
- driver.title 返回页面标题
- current_url 获取当前页面的URL
- is_displayed() 设置该元素是否可见
- s_enabled() 判断元素是否被使用
- is_selected() 判断元素是否被选中
- tag_name 返回元素的tagName
键盘操作
参考文档:
7. WebDriver API — Selenium-Python中文文档 2 documentation
Selenium常见元素定位方法和操作的学习介绍 - 杨秀璋的专栏 - CSDN博客
前面讲述了鼠标操作,现在讲述键盘操作。在webdriver的Keys类中提供了键盘所有的按键操作,当然也包括一些常见的组合键操作如Ctrl+A(全选)、Ctrl+C(复制)、Ctrl+V(粘贴)。更多键参考官方文档对应的编码。
- send_keys(Keys.ENTER) 按下回车键
- send_keys(Keys.TAB) 按下Tab制表键
- send_keys(Keys.SPACE) 按下空格键space
- send_keys(Kyes.ESCAPE) 按下回退键Esc
- send_keys(Keys.BACK_SPACE) 按下删除键BackSpace
- send_keys(Keys.SHIFT) 按下shift键
- send_keys(Keys.CONTROL) 按下Ctrl键
- send_keys(Keys.ARROW_DOWN) 按下鼠标光标向下按键
- send_keys(Keys.CONTROL,‘a’) 组合键全选Ctrl+A
- send_keys(Keys.CONTROL,‘c’) 组合键复制Ctrl+C
- send_keys(Keys.CONTROL,‘x’) 组合键剪切Ctrl+X
- send_keys(Keys.CONTROL,‘v’) 组合键粘贴Ctrl+V
ActionChains 鼠标操作
原文地址:https://www.cnblogs.com/yoyoketang/p/8711367.html
actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。
这对于做更复杂的动作非常有用,比如悬停和拖放。
actionchains也可以和快捷键结合起来使用,如ctrl,shif,alt结合鼠标一起使用
当你使用actionchains对象方法,行为事件是存储在actionchains对象队列。当你使用perform(),事件按顺序执行。
- 方法一:可以写一长串
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
- 方法二:可以分几步写
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
无论哪种方式,操作都是按照调用的顺序执行挨个执行!
方法介绍
1.以下提到的Keys类,是selenium里面的键盘事件类,导入方法:
from selenium.webdriver.common.keys import Keys
2.鼠标事件使用导入方法:
from selenium.webdriver.common.action_chains import ActionChains
class ActionChains(object):
def __init__(self, driver):
self._driver = driver
self._actions = []
def perform(self):
# 执行行为事件
def click(self, on_element=None):
点击:
- 如果参数不写,那么点击的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
def click_and_hold(self, on_element=None):
鼠标左键按住某个元素
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
def context_click(self, on_element=None):
鼠标右键点击
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
def double_click(self, on_element=None):
双击鼠标
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
def drag_and_drop(self, source, target):
按住源元素上的鼠标左键,然后移动到目标元素并释放鼠标按钮
- source: 按住鼠标的元素位置
- target: 松开鼠标的元素位置
def drag_and_drop_by_offset(self, source, xoffset, yoffset):
按住源元素上的鼠标左键,然后移动到目标偏移量并释放鼠标按钮。
- source: 按住鼠标的元素位置
- xoffset: X 轴的偏移量
- yoffset: Y 轴的偏移量
def key_down(self, value, element=None):
只发送一个按键,而不释放它。只应用于修饰键(控制、alt和shift)。
- value: 要发送的修饰符键。值在“Keys”类中定义。
- element: 定位的元素
如果element参数不写就是当前鼠标的位置
举个例子,按住 ctrl+c::
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
def key_up(self, value, element=None):
# 释放按键,配合上面的一起使用
def move_by_offset(self, xoffset, yoffset):
将鼠标移动到当前鼠标位置的偏移量
- xoffset: X轴 作为一个正整数或负整数移动到x偏移量
- yoffset: Y轴 偏移,作为正整数或负整数。
def move_to_element(self, to_element):
鼠标悬停
- to_element: 定位需要悬停的元素
def move_to_element_with_offset(self, to_element, xoffset, yoffset):
通过指定元素的偏移量移动鼠标。偏移量与元素的左上角相对
- to_element: 定位需要悬停的元素
- xoffset: X 轴偏移量
- yoffset: Y 轴偏移量
def release(self, on_element=None):
释放一个元素上的鼠标按钮。
- 如果参数不写,那么是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是这个元素.
def send_keys(self, *keys_to_send):
发送到当前焦点元素
要发送的按键。修饰符键常数可以在“Keys”类。
def send_keys_to_element(self, element, *keys_to_send):
发送到定位到的元素上
- element: 定位的元素
- keys_to_send: 要发送的按键。修饰符键常数可以在“Keys”类。
举个案例
1.实现Ctrl +F5 的组合键功能
# coding:utf-8
# 作者:上海-悠悠
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
time.sleep(3)
# 实现Ctrl+F5刷新
ActionChains(driver).key_down(Keys.CONTROL).send_keys(Keys.F5).key_up(Keys.CONTROL).perform()