1、iframe切换
iframe是什么
在网页中内嵌了另一个html
怎么识别iframe
F12打开开发者工具,在Element面板中鼠标点击要操作的元素会显示元素的完整路径,检查里面是否存在iframe,html
切换进iframe当中去
driver.switch_to.frame(几种方法去定位iframe)
1)id 或者 name 属性
2)webelement对象 -- driver.find_element()
3)iframe索引 -- 从0开始
要从iframe当中直接返回默认html
driver.switch_to.default_content()
返回iframe的上一级
driver.switch_to.parent_frame()
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome() driver.get("https://mail.qq.com/") # 找到iframe元素 ele = driver.find_element(By.XPATH, '//iframe[@class="QQMailSdkTool_login_loginBox_qq_iframe"]') # 切换进入一级iframe driver.switch_to.frame(ele) # 再次切换进入二级iframe driver.switch_to.frame('ptlogin_iframe') # 在新的html当中找元素 driver.find_element(By.ID, 'switcher_plogin').click() time.sleep(7) driver.quit()
2、Alert切换
用于处理js弹窗
Alert类 --目标就是关闭js弹窗
accept() 确定
dismiss() 取消
send_keys() 输入
切换alert:
driver.switch_to.alert()
# 弹出js框 driver.find_element(By.XPATH, '//button[text()="试一试"]').click() # 1、等一等 time.sleep(0.5) # 2、切换到alert alert = driver.switch_to.alert # 3、关闭alert alert.accept()
3、鼠标操作
ActionChains类 -- 鼠标操作类
第一个:鼠标的操作
move_to_element() 悬浮
pause() 动作与动作直接的停顿
click() 点击
context_click() 右击
double_click() 双击
scroll_to_element() 将元素滚动到可见区域,与底部对齐
所有的鼠标操作方法,都返回了self
链式调用:
ActionChains(driver).click().move_to_element().double_click()
第二个:执行动作
perform()
使用步骤:
1)实例化ActionChains类
2)调用鼠标操作方法
3)调用perform()
# 1、实例化ActionChains类 ac = ActionChains(driver) # 2、调用鼠标操作的方法 - 悬浮、点击、双击 ele = driver.find_element(By.XPATH, "//nav//span[contains(text(),'测试派')]") ac.move_to_element(ele).pause(0.5).click(ele).pause(0.5).double_click(ele) # 调用perform() ac.perform()
4、元素找不到有那些情况
noSuchElement
1)检查元素表达式 -- 在运行报错的页面检查一下
2)有可能元素还没有出现 --添加等待
3)是否在iframe中,是否在新窗口中
5、js操作-点击操作
selenium中执行js代码的方法
driver.execute_script(js代码, 传递给js代码的参数)
js代码如何接收外部参数
arguments
ele = driver.find_element(By.XPATH, '//button[contains(@class,"el-button--primary")]') # js代码 js_code = 'arguments[0].click();' # 执行js代码,并将元素对象传递给js driver.execute_script(js_code, ele)
标签:driver,element,alert,切换,iframe,js,click From: https://www.cnblogs.com/qashan/p/17985728