有多种方法可以在网页中定位元素。你可以为你的项目选择最合适的那一个。selenium提供以下方法用于在网页中定位元素。
如果匹配到多个元素将默认返回第一个。
- find_element_by_id(属性)
- find_element_by_name(属性)
- find_element_by_xpath(根据xpath语法)
- find_element_by_link_text(根据链接文字定位)
- find_element_by_partial_link_text(同上模糊定位)
- find_element_by_tag_name(标签名)
- find_element_by_class_name(类名)
- find_element_by_css_selector(根据css语法)
查找(定位)多个元素(以下方法将会返回列表):
使用方法同定位单个元素,不同的是返回匹配的多个元素的列表。
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
除了以上给出的公共方法,还有2个私有方法也许对网页中的元素定位有用。这两个方法是find_element 和 find_elements。
举个栗子:
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button'
以下是By类可用的属性:
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
还可以通过javascript语法来定位,返回类型就是单个HTML元素或者数组。
webdriver.execute_script("javascript code")
举个栗子:
from selenium import webdriver
driver = webdriver.Firefox()
driver.execute_script("document.getElementById('username')")