当前位置:嗨网首页>书籍在线阅读

34-在页面中寻找元素

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

12.8.2 在页面中寻找元素

WebDriver 对象有好几种方法用于在页面中寻找元素。它们被分成 find_element_*find_elements_* 方法。 find_element* 方法返回一个 WebElement 对象,代表页面中匹配查询的第一个元素。 find_elements\* 方法返回 WebElement_* 对象的列表,包含页面中所有匹配的元素。

表12-3展示了 find_element_*find_elements_* 方法的几个例子,它们在变量 browser 中保存的 WebDriver 对象上调用。

表12-3  `selenium` 的 `WebDriver` 方法,用于寻找元素

| 方法名 | 返回的WebElement对象/列表 | | :----- | :----- | :----- | :----- | | browser.find_element_by_class_name( name ) browser.find_elements_by_class_name( name ) | 使用CSS类 name 的元素 | | browser.find_element_by_css_selector( selector ) browser.find_elements_by_css_selector( selector ) | 匹配CSS selector 的元素 | | browser.find_element_by_id( id ) browser.find_elements_by_id( id ) | 匹配 id 属性值的元素 | | browser.find_element_by_link_text( text ) browser.find_elements_by_link_text( text ) | 完全匹配提供的 text<a> 元素 | | browser.find_element_by_partial_link_text( text ) browser.find_elements_by_partial_link_text( text ) | 包含提供的 text<a> 元素 | | browser.find_element_by_name( name ) browser.find_elements_by_name( name ) | 匹配 name 属性值的元素 | | browser.find_element_by_tag_name( name ) browser.find_elements_by_tag_name( name ) | 匹配标签 name 的元素 (大小写不敏感, <a> 元素匹配 'a''A' ) |

除了 *_by_tag_name() 方法,所有方法的参数都是区分大小写的。如果页面上没有元素可匹配该方法要查找的元素,那么 selenium 模块就会抛出 NoSuchElement 异常。如果你不希望这个异常让程序崩溃,就在代码中添加 tryexcept 语句。

一旦有了 WebElement 对象,就可以读取表12-4中的属性,或调用其中的方法,并了解它的更多功能。

表12-4  `WebElement` 的属性和方法

| 属性或方法 | 描述 | | :----- | :----- | :----- | :----- | | tag_name | 标签名,例如 'a' 表示 <a> 元素 | | get_attribute(name) | 该元素 name 属性的值 | | text | 该元素内的文本,例如 <span>hello 中的 'hello' | | clear() | 对于文本字段或文本区域元素,清除其中输入的文本 | | is_displayed() | 如果该元素可见,返回 True ;否则返回 False | | is_enabled() | 对于输入元素,如果该元素启用,返回 True ;否则返回 False | | is_selected() | 对于复选框或单选按钮元素,如果该元素被勾选,返回 True ;否则返回 False | | location | 一个字典,包含键 'x''y' ,表示该元素在页面上的位置 |

例如,打开一个新的文件编辑器,输入以下程序:

from selenium import webdriver 
browser = webdriver.Firefox()
browser.get('https://inv') 
try:
   elem = browser.find_element_by_class_name('  cover-thumb')
   print('Found  <%s>  element  with  that  class  name!'  %  (elem.tag_name))
except:
   print('Was not able to find an element with that name.')

这里我们打开FireFox,让它指向一个URL。在这个页面上,我们试图找到带有类名 'cover-thumb' 的元素。如果找到这样的元素,我们就用 tag_name 属性将它的标签名输出。如果没有找到这样的元素,就输出不同的信息。

这个程序的输出结果如下:

Found <img> element with that class name!

我们发现了一个元素带有类名 'cover-thumb' ,它的标签名是 'img'