一、frame框架里面的元素定位
1.1 iframe定位 -- 先切换到iframe框架-定位-释放iframe
定位到iframe 3种的方法
"""
Switches focus to the specified frame, by index, name, or webelement.
:Args:
- frame_reference: The name of the window to switch to, an integer representing the index,
or a webelement that is an (i)frame to switch to.
:Usage:
driver.switch_to.frame('frame_name') #通过名字
driver.switch_to.frame(1) #通过下标
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0]) #通过WebElement对象来定位
"""
1 #切换到iframe
2 driver.switch_to.frame("login_frame_qq")
3
4 #点击账号密码登录
5 driver.find_element_by_xpath('//a[@id="switcher_plogin"]').click()
6 time.sleep(2)
7 #输入账号密码
8
9 #释放iframe 回到主页面
10 driver.switch_to.default_content()
二、页面滚动条之后的元素定位及窗口切换
2.1 元素拖动到可见区域-定位
四个常见方法:
driver.execute_script("arguments[0].scrollIntoView(false);",element)
2)移动到元素element对象的“顶端”与当前窗口的“顶部”对齐 :
driver.execute_script("arguments[0].scrollIntoView();",element)
3)移动到页面底部:
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
4)移动到页面顶部:
driver.execute_script("window.scrollTo(document.body.scrollHeight,
0)")
如:
1 from selenium import webdriver
2 import time
3 from selenium.webdriver.support.wait import WebDriverWait
4 from selenium.webdriver.support import expected_conditions as EC
5 from selenium.webdriver.common.by import By
6
7 driver = webdriver.Chrome()
8 driver.get("https://www.baidu.com/")
9 driver.maximize_window()
10 time.sleep(3)
11
12 #定位百度搜索框
13 driver.find_element_by_id("kw").send_keys("python")
14 time.sleep(3)
15 driver.find_element_by_id("su").click()
16 time.sleep(5)
17 #找到这个元素
18 ele = driver.find_element_by_xpath('//a[text()="_百度百科"]')
19 #拖动元素到可见区域--scrollIntoView() 拉到顶部显示,有可能会被导航栏遮挡,定位不到而报错;scrollIntoView(false)可视区域底部对齐
20 driver.execute_script("arguments[0].scrollIntoView(false);",ele)
21 time.sleep(5)
2.2 窗口切换
1)windows = driver.window_handles #获取当前所有的窗口
2)driver.switch_to.window(windows[-1]) #切换到最新打开的一个窗口
3)driver.switch_to.window(windows[0]) #切换到第一个窗口
4)driver.current_window_handle() #获取当前窗口句柄
1 #窗口切换
2 #获取当前所有句柄 --返回的是个列表
3 windows = driver.window_handles
4 ele.click()
5 time.sleep(10)
6
7 #等待新窗口打开
8 WebDriverWait(driver,10,0.5).until(EC.new_window_is_opened(windows))
9 #获取当前所有句柄
10 windows = driver.window_handles
11 #切换到最后一个句柄 -- 根据返回的列表下标取值
12 driver.switch_to.window(windows[-1])
13 #滑动到页面最底部
14 driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
15 driver.current_window_handle()
16
17 time.sleep(5)
18 driver.quit()