四、iframe切换+alert切换+鼠标操作+js操作

小小生Sir / 2024-01-25 / 原文

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)