selenium笔记:窗口切换时的元素定位
主要参考虫师的博客,他的文章里面讲得比较简单,有一些情况没有考虑到,在这里做个笔记。
在虫师的博客中讲了如何在一个给定的网页去定位元素,但是如果在实际操作中,需要由一个页面跳转到另一个页面时,就需要页面之间的切换了。
1. switch_to_window()
这个方法在虫师的博客中讲得不是很详细,我主要参考的是 http://blog.csdn.net/hhabc123456789/article/details/21862139
直接上一个我用来测试的例子吧。
#coding=utf-8 import os from selenium import webdriver import time chrome = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe' os.environ["webdriver.chrome.driver"] = chrome driver = webdriver.Chrome(chrome) driver.get('http://www.baidu.com') #获取当前窗口的句柄 currentWin = driver.current_window_handle #跳转到另一个新页面 driver.find_element_by_xpath("//p[@id='nv']/a[3]").click() time.sleep(1) #获取所有窗口的句柄 handles = driver.window_handles for i in handles: if currentWin == i: continue else: #将driver与新的页面绑定起来 driver = driver.switch_to_window(i) #在新的页面定位元素 driver.find_element_by_xpath("//div[@id='menu']/a[1]").click() time.sleep(2) driver.quit()
应该比较清晰了,注释里面都解释了。
补充一下:我本来以为只要网页的url改变了,driver就需要更新。后来发现driver真的是对应到一个特定的窗口的。不论url如何更新,只要没有新的“标签页”出现(html的实现上就是target="_blank"这种形式的),driver就不用更新,也就用不到这里的switch_to_window()的方法了。
2. switch_to_frame()
这个方法虫师将得比较清楚,可以参考这里的例子,只是有一个问题需要注意。如下代码
#coding=utf-8 from selenium import webdriver import time import os browser = webdriver.Firefox() file_path = 'file:///' + os.path.abspath('frame.html') browser.get(file_path) browser.implicitly_wait(30) #先找到到ifrome1(id = f1) ##############一定要先定位frame1,才能找得到fram2############################### browser.switch_to_frame("f1") #再找到其下面的ifrome2(id =f2) browser.switch_to_frame("f2") #下面就可以正常的操作元素了 browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() time.sleep(3) browser.quit()
如注释里面说明的,如果frame有嵌套的话,必须一层一层的找。否则会报错。
如上
Bon Appetite!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步