[Python 应用: 爬虫] Selenium 定位元素方法
Posted dream-on-all-in
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python 应用: 爬虫] Selenium 定位元素方法相关的知识,希望对你有一定的参考价值。
本文内容摘自:https://selenium-python.readthedocs.io/locating-elements.html
定位元素有很多种方式,你可以选择适合你使用情况的。Selenium 提供如下几种定位元素的方式:
- find_element_by_id
- find_element_by_name
- find_element_by_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
上述定位方式只定位页面中的拥有同样类型第一个元素,如果想定位同样名字或同样名字的所有元素,以下方式可以采用:(返回的是一个列表,这样的话也意味着你可以定位列表中的任何一个元素,比如可用于有同样的class name 的元素的的定位,通过 class name定位所有同样class name的元素列表,再指定列表中的某个元素就 能得到你想要的元素了)
- 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
除了上面的方式外,还有两种可选择的方式:find_element and find_elements. 但是这两种方式要导入 By ,如下例子:
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, ‘//button[text()="Some text"]‘)
driver.find_elements(By.XPATH, ‘//button‘)
通过By 的方式,下面的属性是可以通过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"
此处为分割线
--------------------------------------------------------------------------------------------------------
下面将分别举例说明每种定位方式:
一、通过 Id 定位元素
这种方式是最好理解的。如果你已经知道某个元素的Id属性,直接可以用Id定位到这个元素。但是在有多个元素都拥有这个Id属性的时候,你通过find_element_by_id只能返回第一个匹配到的元素。
下面的方式也会有同样的问题,往下就不会赘述这个问题。如果匹配不到的话,会返回NoSuchElementException。
看个例子,网页代码如下:
form 元素就可以通过如下方式定位到:
login_form = driver.find_element_by_id(‘loginForm‘)
二、通过 Name 定位元素
第二种方式也是很好理解的。还是上面的网页代码,如果想过定位到 username & password 两个元素,就可以通过 find_element_by_name 的方式
username = driver.find_element_by_name(‘username‘)
password = driver.find_element_by_name(‘password‘)
假设网页代码中有如下:
可以看到,有两个元素有同样的名字属性。我们通过 find_element_by_name的方式实际只能定位到 Login 。
Login = driver.find_element_by_name(‘continue‘)
如果我们想定位到Clear 怎么办呢? 可以通过 find_elements_by_name 的方式。上面说过通过这种方式返回的是一个list, 那个对应list 第二个元素就是我们要的Clear 了。
Clear = driver.find_elements_by_name(‘continue‘)[1]
三、通过 XPath 定位元素
四、通过 Link Text 定位超链接
五、通过 Tag Name 定位元素
六、通过 Class Name 定位元素
七、通过 CSS 选择器来定位元素
以上是关于[Python 应用: 爬虫] Selenium 定位元素方法的主要内容,如果未能解决你的问题,请参考以下文章
[Python 应用:爬虫] selenium 之 键盘操作
[Python爬虫]使用Selenium操作浏览器订购火车票