多表单切换
如果定位不到元素,先查看是不是iframe表单,如果是先切换到iframe表单
import time from selenium import webdriver #要想调用键盘按键操作需要引入keys包 from selenium.webdriver.common.keys import Keys # from selenium.webdriver.commom.by import By from selenium.webdriver.common.action_chains import ActionChains def swich_frame(): browser = webdriver.Firefox() #切换到表单 iframe(id='if') browser.switch_to.frame('if') #接下来就操作正常的元素了 browser.find_element_by_css_selector("#kw").send_keys(u'易烊千玺') browser.find_element_by_id("su").click()
switch_to.frame()默认可以直接取表单的id或者 name属性。如果ifram 没有可用的id 和name 属性,则可以通过下面的方法定位
def swich_frame(): browser = webdriver.Firefox() #先通过xpath 定位到iframe xf=browser.find_element_by_xpath('//*[@class="if"]') #再将定位对象传给switch_to.frame()方法 browser.switch_to.frame(xf) browser.switch_to.parent_frame()
switch_to.parent_frame()跳出当前一级表单,该方法默认对应于离它最近的switch_to.frame()方法,除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面
多窗口切换
有些web页面打开后,会重新打开一个新的窗口,如果想要在新的窗口上操作,就得先切换窗口。获取窗口的唯一标识用句柄表示,所以只要切换句柄,就可以在多个页面上操作
driver.current_window_handle :获取当前窗口句柄
driver.window_handles :返回所有窗口的句柄
driver.switch_to.window() :用于切换到相应的窗口
def switch_window(): browser = webdriver.Firefox() browser.implicitly_wait(5) browser.get("http://www.baidu.com") #获得百度搜索窗口句柄 search_window=browser.current_window_handle browser.find_element_by_link_text(u"登录").click() browser.find_element_by_link_text(u'立即注册').click() #获得当前所有打开窗口的句柄 all_handles=browser.window_handles #进入注册窗口 for handle in all_handles: if handle!=search_window: browser.switch_to.window(handle) browser.implicitly_wait(10) browser.find_element_by_name("phone").send_keys('username') browser.find_element_by_css_selector('#TANGRAM__PSP_4__password').send_keys('1234456tang') time.sleep(3) #回到搜索窗口 for handle in all_handles: if handle==search_window: browser.switch_to.window(handle) browser.implicitly_wait(10) browser.find_element_by_id('kw').send_keys('test') browser.find_element_by_id('su').click() time.sleep(2) browser.quit()