定位一组元素
和定位单个元素类似,WebDriver提供了8种用于定位一组元素的方法。定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。
find_elements_by_id() find_elements_by_name() find_elements_by_class_name() find_elements_by_tag_name() find_elements_by_link_text() find_elements_by_partial_link_text() find_elements_by_xpath() find_elements_by_css_selector()
代码演示:
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('https://www.baidu.com') driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click() sleep(1) #定位一组元素 texts = driver.find_elements_by_xpath('//div/h3/a') #循环遍历出每一条搜索结果的标题 for t in texts: print(t.text) sleep(1) #主要目的是为了等待定位元素遍历,不然 关闭太快抓取不到 driver.close()
多表单切换 switch_to.frame()
多窗口切换 switch_to.window()方法
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。
current_window_handle:获得当前窗口句柄。 window_handles:返回所有窗口的句柄到当前会话。 switch_to.window():用于切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换。
from selenium import webdriver from time import sleep driver = webdriver.Chrome() #设置隐式等待时间为10秒 driver.implicitly_wait(10) driver.get('https://www.baidu.com') # 获得百度搜索窗口句柄 sreach_windows = driver.current_window_handle driver.find_element_by_link_text('登录').click() driver.find_element_by_link_text("立即注册").click() #获得当前所有打开的窗口的句柄 all_handles=driver.window_handles #进入注册窗口 for handle in all_handles: if handle != sreach_windows: driver.switch_to.window(handle) print('now register window!') driver.find_element_by_name("account").send_keys('username') driver.find_element_by_name('password').send_keys('password') sleep(2) #会报错 driver.quit()