个人推荐使用xpath定位,因为他简单实用:直接找到你需要的“检查”,然后点击左键,选择copy, 选择xpath就可以了。得到后,最好使用CTRL+F查找一下,看看是否有多个,一定要准确。
#建议百度寻找 “爬虫定位元素”了解一下,个人理解:就像目录一样一级一级的查找,或者根据他独有的特征查找。
定位器 Locator | 描述 |
---|---|
class name | 定位class属性与搜索值匹配的元素(不允许使用复合类名) |
css selector | 定位 CSS 选择器匹配的元素 |
id | 定位 id 属性与搜索值匹配的元素 |
name | 定位 name 属性与搜索值匹配的元素 |
link text | 定位link text可视文本与搜索值完全匹配的锚元素 |
partial link text | 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。 |
tag name | 定位标签名称与搜索值匹配的元素 |
xpath | 定位与 XPath 表达式匹配的元素 |
有两种写法都行:
1. driver.find_element(By.ID, "cheese") #官方推荐的 #可以将ID改成上述的其他其他7种定位方法,不过后面的参数(匹配内容)需要修改。 # By 是来自于 from selenium.webdriver.common.by import By 2. driver.find_element_by_id('cheese')
上面两个图片分别为百度的输入框和输入框的源码,通过源码我们可以很轻松的找到其 id为'kw' 结果:
driver = webdriver.Chrome(options=_options) driver.get('https://www.baidu.com/') input_address = driver.find_element_by_id('kw') print(input_address) #结果: <selenium.webdriver.remote.webelement.WebElement (session="05087667be51e2eabd97f722aa597143", element="64a7cd32-64c5-4f77-8231-bfccba6224bf")>
Selenium是通过使用JavaScript函数 getBoundingClientRect() 来查找相对元素的。这个函数能够返回对应元素的各种属性例如:右,左,下,上。
above() 元素上; below() 元素下;toLeftOf() 元素左;toRightOf() 元素右;near() 附近
from selenium.webdriver.support.relative_locator import with_tag_name passwordField = driver.find_element(By.ID, "password") emailAddressField = driver.find_element(with_tag_name("input").above(passwordField))