网页上常见的下拉框有两种:一种是需要点击一下下拉框,才能弹出下拉列表的下拉框;还有一种是不需要点击,鼠标移动到下拉框上,就自动弹出下拉列表。
对于第一种类型的下拉框一般的处理是两次点击,第一点击弹出下拉框,第二次点击操作元素。第二种我们可以使用move_to_element()进行操作。
不需要点击的下拉框:
百度首页右上角的“设置”就是这样的下拉框。只需要把鼠标移动到上面,就会列出可选的下拉列表。
对于这种类型的下拉框,我们采用webdriver中的鼠标事件进行操作。webdriver中对鼠标的操作包括单机、右击、双击、拖动等,这些操作都封装在ActionChains类中。后面我们会专门针对这些事件进行总结,这里先专注对鼠标移动的操作。
先上源代码:
from selenium import webdriver driver = webdriver.Firefox() driver.get('http://ww.baidu.com') driver.maximize_window() setting = driver.find_element_by_link_text(u'设置') webdriver.ActionChains(driver).move_to_element(setting).perform() driver.find_element_by_link_text(u'高级搜索').click()移动鼠标的操作首先通过webdriver实例化一个ActionChains类的对象,用该对象调用move_to_element() 方法将鼠标悬停在一个元素上,perform是用来执行move_to_element这个动作的。
需要点击的下拉框:
webdriver 对于一般的下拉框处理起来也相当简单,要想定位下拉框中的内容,首先需要定位到下拉框,也就是需要两次定位。以百度“高级搜索”设置页面中的“时间:限定要搜索的网页的时间是”下拉列表为例,
我们想定位到其中的“最近一月”,我们可以这样做:
time_setting = driver.find_element_by_id('adv-setting-4') time_setting.find_element_by_xpath("//option[@value='30']").click()先定位到id为adv-setting-4的下拉框,然后在定位到value=‘30’的下拉项。