selenium常用操作学习笔记

一,弹窗处理(推荐文章:https://blog.csdn.net/huilan_same/article/details/52298460)

selenium提供switch_to方法定位弹窗的对话框:alert,prompt,confirm

方法一:

a = driver.switch_to.alert # 定位弹窗的对话框
driver.switch_to.alert.accept() # 点击确认
driver.switch_to.alert.dismiss() # 点击取消
driver.switch_to.alert.send_keys('输入内容') # 输入内容
driver.switch_to.alert.text() # 获取对话框文本值

方法二:

使用显式等待,判断alert是否出现(EC.alert_is_present())

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 5)
wait.until(EC.alert_is_present()).accept()
wait.until(EC.alert_is_present()).dismiss()
wait.until(EC.alert_is_present()).send_keys("XXX")
wait.until(EC.alert_is_present()).text()

二,windows弹窗处理

1.定位iframe弹窗

# 切换到iframe中,然后再定位
# 方法一,根据iframe标签的id属性值定位,id唯一
driver.switch_to.frame('frame_id')
# 方法二,根据iframe标签的name属性值定位,name唯一
driver.switch_to.frame('frame_name')
# 方法三,通过索引定位
# index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位
driver.switch_to.frame(1)
# 方法四,根据webelement对象进行定位
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])

2.frame间的切换

<html>
    <iframe id="frame1">
        <iframe id="frame2" / >
    </iframe>
</html>

 

# 从iframe回到父html,从ifrme1或iframe2回到父html
driver.switch_to.default_content()
# 能够切换到父iframe元素中,从iframe2回到iframe1
driver.switch_to.parent_frame()

三,窗口间切换

# 获取所有窗口
all_windows = driver.window_handles

# 获取当前窗口handle name
current_window = driver.current_window_handle

# 方法一
# 切换window,如果window不是当前window,则切换到该window
for window in all_windows:
    if window != current_window:
        driver.switch_to.window(window)

# 方法二
# 切换到最新的窗口
driver.switch_to.window(driver.window_handles[-1])

# 关闭新窗口后切回原窗口,在这里不切回原窗口,是无法操作原窗口元素的,即使你关闭了新窗口
driver.close()
driver.switch_to.window(current_window)  

四,鼠标操作(参考文档:https://blog.csdn.net/jamieblue1/article/details/89856576 和 module-selenium.webdriver.common.action_chains

ActionChains支持模拟一系列的鼠标操作,例如鼠标移动、鼠标按钮操作、按键操作、上下文交互操作、单击、双击、右键、拖拽等。

1,ActionChains包括的方法

ActionChains类中的操作方法解析
click(on_element=None)点击鼠标左键
click_and_hold(on_element=None)点击鼠标左键不松开
context_click(on_element=None)点击鼠标右键
double_click(on_element=None)双击鼠标左键
drag_and_drop(source, target)拖拽指定元素source,到指定target,并松开
drag_and_drop_by_offset(source, xoffset, yoffset)拖拽指定元素source到指定的x,y坐标,并松开
key_down(value, element=None)按下某个键盘上的键
key_up(value, element=None)松开某个键
move_by_offset(xoffset, yoffset)鼠标从当前位置移动到某个坐标
move_to_element(to_element)鼠标移动到指定元素的中间
move_to_element_with_offset(to_element, xoffset, yoffset)鼠标移动到距离指定元素x,y坐标的位置
pause(seconds)在指定时间内暂停所有的输入
perform()执行链中的所有动作
release(on_element=None)在某个元素位置松开鼠标左键
reset_actions()清除本地和远程端上已经存储的操作
send_keys(*keys_to_send)发送某些键到当前焦点的元素
send_keys_to_element(element, *keys_to_send)发送某些键到指定元素

 比如,点击百度页面右上角的【设置->高级设置】

注意:a.c.c的操作只是模拟鼠标移动到元素上,此后便可定位元素并做点击操作

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

# 创建浏览器对象
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 定位设置元素
element = driver.find_element_by_xpath("//div[@id='u1']//a[@name='tj_settingicon']")

# 鼠标移动到设置上,其下面的子元素都可以显示出来;鼠标移开的时候,子元素则消失。
# 浏览器无法操作这些元素,可以借助ActionChain对象

# a.创建ActionChain对象,控制鼠标
action_chains = ActionChains(driver)
# b.设置动作,此时鼠标还未操作
action_chains.move_to_element(element)
# c.执行动作
action_chains.perform()
# 定位高级搜索,并点击
driver.find_element_by_link_text('高级搜索')
# 关闭浏览器
driver.close()

查看ActionChains模块源码可以发现,ActionChains中的操作方法,会将操作放到self._actions(类型为list)队列中,并返回self实例本身,然后通过perform方法,依次执行队列中的操作。

When you call methods for actions on the ActionChains object,
the actions are stored in a queue in the ActionChains object.
When you call perform(), the events are fired in the order they
are queued up.

#
支持链式操作 ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

五,滚动条处操作

使用driver.execute_script(script, *args)方法

# 滚动到最底部
window.scrollTo(0, document.body.scrollHeight)
# 滚动到最顶部
window.scrollTo(document.body.scrollHeight, 0)


ele = driver.find_element_by_xpath('')
# 将定位的元素滚动到最顶部
driver.execute_script('arguments[0].scrollIntoView()', ele)
# 将定位的元素滚动到最底部
driver.execute_script('arguments[0].scrollIntoView(false)', ele)
# 将定位的元素滚动到最中间
driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth",
block: "center", inline: "center"})', ele)

六,select标签的下拉框的选择

1.选择

from selenium.webdriver.support.select import Select

#
创建Select对象,将定位的select元素(WebElement对象)作为参数传过来 select = Select(driver.find_element_by_name("gpc")) # 通过index进行选择,索引从0开始 select.select_by_index(1) # 通过value进行选择 select.select_by_value("a") # 通过选项文字进行选择 select.select_by_visible_text("最近一月")
# 获取所有已选择的元素组成的列表 select.all_selected_options select.options

2.取消选择,Select提供了四个方法给我们取消原来的选择:

# 去除所有的选择
select.deselect_all()

select.deselect_by_index(index) 

select.deselect_by_value(value) 

deselect_by_visible_text(text) 

3.关于选项的操作

# 获取select元素所有的options
select.options
# 打印select元素中所有的options
for s in select.options:
    print(s.text)
# 获取所有被选中的options
select.all_selected_options
# 获取第一个被选中的option
select.first_selected_opt

七,其他操作

# 浏览器前进
driver.forward()
# 浏览器后退
driver.back()
# 浏览器刷新
driver.refresh()
# 窗口最大化
driver.maximize_window()
# 获取标题
driver.title
# 如果类属型是动态的,可以通过get_attribute获取当前元素的类或者name属性值
attr = driver.find_element_by_xpath("//div[@class='inner']").get_attribute('class')

 

转载于:https://www.cnblogs.com/ella-li/p/11625378.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值