selenium模拟事件
(1)、鼠标模拟事件
from selenium.webdriver.common.action_chains improt ActionChains
执行原理:
调用ActionChains的方法事不会立即执行,会将所有的按顺序放在一个队列里,当调用perform()方法时,队列中的事件会依次执行。
鼠标事件的常用方法:
ActionChains(driver).方法().perform()
click(element) 单击鼠标左键
context_click(element) 单击鼠标右键
double_click(element) 双击鼠标左键
move_to_element(element) 鼠标移动到某个元素
element.send_keys(keys) 发送某个词到当前焦点元素
click_and_hold(element) 点击鼠标左键,不松开
release(element) 在某个元素位置松开鼠标左键
key_down(value,element) 按下某个键盘上的键
key_up(value,element) 松开某个键
drag_and_drop(source,traget) 拖曳到某个元素然后松开
drag_and_drop_by_offset(source,xoffset,yoffset) 拖曳到某个坐标然后松开
move_by_offset(xoffset,yoffset) 鼠标从当前位置移动到某个坐标
move_to_element_by_offset(to_element,xoffset,yoffset) 移动到距某个元素(左上角坐标)多少距离的位置
send_keys_to_element(element,keys_to_send) 发送某个键到指定元素
距离:
鼠标事件之菜单栏hove弹出
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get("http://xdclass.net")
driver.maximize_window()
menu_element=driver.find_element_by_css_selector("#app > div > div.main > div.banner.w > div.l_course_list > ul > li:nth-child(1)")
#鼠标移动到该指定的menu_element元素上
ActionChains(driver).move_to_element(menu_element).perform()
#对鼠标移动之后出现的元素定位后点击操作
sub_menu_element=driver.find_element_by_css_selector("#app > div > div.main > div.banner.w > div.innerbox > div.base > div.sort > a:nth-child(2)")
sub_menu_element.click()

菜单栏hover弹出.png
举例2:
查找登录框-》输入用户名和密码-》触发登录-》判断登录是否成功-》打印结果
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get("http://xdclass.net")
driver.maximize_window()
driver.implicitly_wait(5)
login_element=driver.find_element_by_css_selector("#app > div > div:nth-child(1) > div.header > div.r_userinfo.f_r > div.login > span:nth-child(2)")
#对登录按钮触发点击事件,也可以直接调用 login_element.click()
ActionChains(driver).click(login_element).perform()
#定位输入用户名和密码输入框
#注入输入框输入值之前最好先清理
driver.find_element_by_css_selector("[type='text']").clear()
driver.find_element_by_css_selector("[type='text']").send_keys('13045890834')
driver.find_element_by_css_selector("[type='password']").clear()
driver.find_element_by_css_selector("[type='password']").send_keys('hdc@328216')
driver.find_element_by_class_name("btn").click()
#鼠标移动至登录之后的用户头像
user_info_element=driver.find_element_by_xpath('//*[@id="app"]/div/div[1]/div[2]/div[4]/div[5]/img')
ActionChains(driver).move_to_element(user_info_element).perform()
#判断登录是否成功
#获取登录之后的用户名称
user_name_element=driver.find_element_by_xpath('//*[@id="app"]/div/div[1]/div[2]/div[6]/div/div/div[1]/p')
name=user_name_element.text #每个元素都可调用element.text 获得其文本值
if name == 'hudechao':
print('login success')
else:
网友评论