模拟点击,鼠标移动,拖拽,按键,下拉框的处理

1.模拟点击
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/clicks.htm')
click_btn = driver.find_element_by_xpath('//input[@value="click me"]') # 单击按钮
doubleclick_btn = driver.find_element_by_xpath('//input[@value="dbl click me"]') # 双击按钮
rightclick_btn = driver.find_element_by_xpath('//input[@value="right click me"]') # 右键单击按钮
ActionChains(driver).click(click_btn).double_click(doubleclick_btn).context_click(rightclick_btn).perfor
m() # 链式用法
print(driver.find_element_by_name('t2').get_attribute('value'))
sleep(2)
driver.quit()
2.鼠标移动
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/mouseover.htm')
write = driver.find_element_by_xpath('//input[@value="Write on hover"]') # 鼠标移动到此元素,
在下面的 input 框中会显示“Mouse moved”
blank = driver.find_element_by_xpath('//input[@value="Blank on hover"]') # 鼠标移动到此元素,
会清空下面 input 框中的内容
result = driver.find_element_by_name('t1')
action = ActionChains(driver)
action.move_to_element(write).perform() # 移动到 write,显示“Mouse moved”
print(result.get_attribute('value'))
# action.move_to_element(blank).perform()
action.move_by_offset(10, 50).perform() # 移动到距离当前位置(10,50)的点,与上句效果相同,
移动到 blank 上,清空
print(result.get_attribute('value'))
action.move_to_element_with_offset(blank, 10, -40).perform() # 移动到距离 blank 元素(10,-40)的
点,可移动到 write 上
print(result.get_attribute('value'))
sleep(2)
driver.quit()
3.拖拽
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/dragDropMooTools.htm')
dragger = driver.find_element_by_id('dragger') # 被拖拽元素
item1 = driver.find_element_by_xpath('//div[text()="Item 1"]') # 目标元素 1
item2 = driver.find_element_by_xpath('//div[text()="Item 2"]') # 目标 2
item3 = driver.find_element_by_xpath('//div[text()="Item 3"]') # 目标 3
item4 = driver.find_element_by_xpath('//div[text()="Item 4"]') # 目标 4
action = ActionChains(driver)
action.drag_and_drop(dragger, item1).perform() # 1.移动 dragger 到目标 1
sleep(2)
action.click_and_hold(dragger).release(item2).perform() # 2.效果与上句相同,也能起到移动效果
sleep(2)
action.click_and_hold(dragger).move_to_element(item3).release().perform() # 3.效果与上两句相
同,也能起到移动的效果
sleep(2)
# action.drag_and_drop_by_offset(dragger, 400, 150).perform() # 4.移动到指定坐标
action.click_and_hold(dragger).move_by_offset(400, 150).release().perform() # 5.与上一句相同,移
动到指定坐标
sleep(2)
driver.quit()
4.按键
模拟按键有多种方法,能用 win32api 来实现,能用 SendKeys 来实现,也可以用 selenium 的
WebElement 对象的 send_keys()方法来实现,这里 ActionChains 类也提供了几个模拟按键的
方法。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
# 要想调用键盘按键操作需要引入 keys 包
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/keypress.htm')
key_up_radio = driver.find_element_by_id('r1') # 监测按键升起
key_down_radio = driver.find_element_by_id('r2') # 监测按键按下
key_press_radio = driver.find_element_by_id('r3') # 监测按键按下升起
enter = driver.find_elements_by_xpath('//form[@name="f1"]/input')[1] # 输入框
result = driver.find_elements_by_xpath('//form[@name="f1"]/input')[0] # 监测结果
# 监测 key_down
key_down_radio.click()
ActionChains(driver).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform()
print(result.get_attribute('value'))
# 监测 key_up
key_up_radio.click()
enter.click()
ActionChains(driver).key_down(Keys.SHIFT).key_up(Keys.SHIFT).perform()
print(result.get_attribute('value'))
# 监测 key_press
key_press_radio.click()
enter.click()
ActionChains(driver).send_keys('a').perform()
print(result.get_attribute('value'))
driver.quit()
下拉框的处理
有时候我们会碰到<select> </select>标签的下拉框。直接点击下拉框中的选项不一定可行。
Selenium 专门提供了 Select 类来处理下拉框完成这些事情
 Select 提供了三种选择方法:
select_by_index(index) ——通过选项的顺序,第一个为 0
select_by_value(value) ——通过 value 属性
select_by_visible_text(text) ——通过选项可见文本
 全部取消选择:
select.deselect_all()
 Select 提供了相应属性,选择了选项之后,查看所选项
options ——提供所有的选项的列表,其中都是选项的 WebElement 元素
all_selected_options ——提供所有被选中的选项的列表,其中也均为选项的 WebElement 元素
first_selected_option ——提供第一个被选中的选项,也是下拉框的默认值
范例
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome()
driver.get('http://sahitest.com/demo/selectTest.htm')
s1 = Select(driver.find_element_by_id('s1Id')) # 实例化 Select
s1.select_by_index(1) # 选择第二项选项: o1
print(s1.first_selected_option.text)
s1.select_by_value("o2") # 选择 value="o2"的项
print(s1.first_selected_option.text)
s1.select_by_visible_text("o3") # 选择 text="o3"的值,即在下拉时我们可以看到的文本
print(s1.first_selected_option.text)
driver.quit()
弹窗处理
当你触发了某个事件之后,页面出现了弹窗提示,处理这个提示或者获取提示信息方法如下:
alert = driver.switch_to_alert()
用 switch_to_alert 先定位到弹窗,然后使用一系列方法来操作:
accept - 点击【确认】按钮
dismiss - 点击【取消】按钮(如有按钮)
send_keys - 输入内容(如有输入框)
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://sahitest.com/demo/alertTest.htm")
driver.find_element_by_name("b1").click()
time.sleep(1)
al = driver.switch_to_alert()
time.sleep(1)
al.accept()
switch_to_alert()是旧写法,新写法应该是 switch_to.alert(),但是会报错,猜测是版本问题。
页面切换
一个浏览器肯定会有很多窗口,切换窗口的方法如下:
driver.switch_to.window("this is window name")
也可以使用 window_handles 方法来获取每个窗口的操作对象。例如:
for handle in driver.window_handles:
driver.switch_to_window(handle)
python 之――――selenium

页面前进和后退
操作页面的前进和后退功能:
driver.forward() #前进
driver.back() # 后退
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(3) # seconds
first_url = 'http://www.baidu.com/'
driver.get(first_url)
print(driver.title) # 第一个页面
driver.find_element_by_link_text("新闻").click()
driver.switch_to_window(driver.window_handles[0])
print(driver.title) # 第一个页面
#browser.switch_to_window(browser.window_handles[1])
#browser.title # 最后一个页面
time.sleep(2)
driver.back() # 从百度新闻后退到百度首页
print(driver.title) # 第一个页面
time.sleep(2)
driver.forward() # 百度首页前进到百度新闻
print(driver.title) # 第一个页面
time.sleep(2)
driver.quit()
窗口最大化
driver.maximize_window()
 

猜你喜欢

转载自blog.csdn.net/cyq15539975613/article/details/83338510
今日推荐