python代码学习——操作:鼠标、下拉列表、键盘、滚动条
- 鼠标操作
- 下拉列表的操作
- 按键操作
- 滚动条
鼠标操作
- 有一种鼠标移开就消失不见的元素如何去定位?
- 使用快捷键:鼠标放在要定位的元素上,然后使用ctrl+shift+c即可
- 鼠标操作需要导入模块:
from selenium.webdriver.common.action_chains import ActionChains
- 使用以下操作,必须要调用perform,在所有的操作写完之后最后调用
ele = diver.find_element_by_id("kw")
ActionChains(diver).click() #单击,以当前鼠标位置为准
ActionChains(diver).click_and_hold()#按住左键,别松开
ActionChains(diver).context_click()#右键
ActionChains(diver).double_click()#双击
ActionChains(diver).drag_and_drop(ele,ele)#拖拽,需要传参,source和target,
# source代表拖拽前位置,target拖拽后的位置。source和target都是element
ActionChains(diver).key_down()#不释放,只能用在控制键上,例如ctrl、alt、shift,不常使用
ActionChains(diver).key_down()#释放,不常使用
ActionChains(diver).move_to_element(ele)#悬浮,需要传参,element
- 鼠标悬浮的代码示例:
#打开一个会话
diver = webdriver.Chrome()
#全屏
diver.maximize_window()
#访问百度链接
diver.get("https://www.baidu.com")
ele_1 = diver.find_element_by_xpath('//span[@id="s-usersetting-top"]')
ActionChains(diver).move_to_element(ele_1).perform()#注意,一定要调用perform
ele = diver.find_element_by_xpath(
'//div[@class="s-user-setting-pfmenu"]//a[text()="高级搜索"]')
ele.click()
#关闭会话
diver.quit()
- 多个鼠标操作的例子,以两个为例:
ActionChains(diver).move_to_element(ele_1).drag_and_drop().perform()
下拉列表的操作
- 下拉列表对的操作中,最常见的是直接匹配文本内容,代码示例:
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time
#打开一个会话
diver = webdriver.Chrome()
#全屏
diver.maximize_window()
#访问百度链接
diver.get("https://www.baidu.com")
ele_1 = diver.find_element_by_xpath('//span[@id="s-usersetting-top"]')
#鼠标悬浮在设置链接上,显示下拉列表。
#perform()一定要调用。
ActionChains(diver).move_to_element(ele_1).perform()
WebDriverWait(diver,20).until(
EC.visibility_of_element_located(
(By.XPATH,'//span[@id="s-usersetting-top"]')))
#下拉列表,直接查找文本内容
ele = diver.find_element_by_xpath(
'//div[@class="s-user-setting-pfmenu"]//a[text()="高级搜索"]')
ele.click()
#关闭会话
time.sleep(10)
diver.quit()
- 如果是下拉选框的下拉列表,如何操作?
- 这中下拉列表有个很明显的方式:session和option
- 需要导入新的类:
from selenium.webdriver.support.ui import Select
- 选择下拉列表的选项有三种方式来选择:1.文本内容;2.value属性;3.通过下标来选择
- 这个类中存在不选中的方法,适用于多选
- 代码示例:
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
from selenium import webdriver
#使用之前,引入相关的库:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#设置链接
ele = driver.find_element_by_xpath('//*[@id="u1"]//a[@name="tj_settingicon"]')
#鼠标悬浮在设置链接上,显示下拉列表。
#perform()一定要调用。
ActionChains(driver).move_to_element(ele).click(ele).perform()
#ele.click()
#//a[text()="高级搜索"]
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//a[text()="高级搜索"]')))
driver.find_element_by_xpath('//a[text()="高级搜索"]').click()
#等待元素可见
WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//select[@name="ft"]')))
#Select下拉列表//select[@name="ft"]
ele = driver.find_element_by_xpath('//select[@name="ft"]')
ele.send_keys()
s = Select(ele)#实例化一个对象
#通过元素的value属性获取
s.select_by_value('rtf')
time.sleep(2)
#通过下标来选择
s.select_by_index(3)
time.sleep(2)
#通过文本来选择
s.select_by_visible_text('Adobe Acrobat PDF (.pdf)')
按键操作
- 按键操作使用专门的按键库:
from selenium.webdriver.common.keys import Keys
- 可以直接按着ctrl,点击keys,查兰源码来学习,里面包含了所有键盘的值
- 可以通过以下的代码来实现复制、粘贴、全选等操作
- ele=diver.find_element_by_xpath(表达式)
- ele.send_keys(Keys.CONTROL,‘a’)#全选
- ele.send_keys(Keys.CONTROL,‘c’)#复制
- ele.send_keys(Keys.CONTROL,‘x’)#剪切
- ele.send_keys(Keys.CONTROL,‘v’)#粘贴
- 非组合件的输入方式,都是放在send_keys中使用
- 回车:Keys.ENTER
- 删除Keys.BACK_SPACE
- 空格Keys.SPACE
- tab键 Keys.TAB
- 回退Keys.ESCAPE
- 刷新Keys.F5
滚动条
- 滚动到某个位置是要看元素的位置
- 执行javascript语句:
driver.execute_script
- javascript中如何调用python中的参数?如下:
a = 1
b = 2
driver.execute_script("var res = arguments[0] > arguments[1];",a,b)
- 如何实现滚动条的操作?
- 1.首次找到这个元素:diver.find_element_by_xpath(‘XXX"]’)
- 2.再将元素拖动到可见的区域内,通过执行javascript语句实现
driver.execute_script("arguments[0] .scrollIntoView();",element)
driver.execute_script("arguments[0] .scrollIntoViewIfneeded();",element)
- 3.在操作元素:
element.XXX()
- 滚动到底部和滚动到顶部,移动元素至顶部或者底部,代码如下:
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
from selenium.webdriver.common.keys import Keys
#输入内容,点击百度一下,进行搜索
driver.find_element_by_id("kw").send_keys("百度贴吧",Keys.ENTER)
time.sleep(2)
#滚动到页面底部
element = driver.find_element_by_xpath('//a[text()="吧 - "]')
#滚动到页面底部
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(2)
#移动到页面顶部
driver.execute_script("window.scrollTo(document.body.scrollHeight,0)")
time.sleep(2)
#移动元素element对象的“顶端”与当前窗口的“顶部”对齐
driver.execute_script("arguments[0] .scrollIntoView();",element)
time.sleep(2)
#移动元素element对象的“顶端”与当前窗口的“底部”对齐
driver.execute_script("arguments[0] .scrollIntoView(False);",element)
time.sleep(2)
driver.quit()