Selenium学习笔记--Webdriver API 1--定位元素方式

Webdriver 定位元素的8种方法

  • id定位:find_element_by_id()
  • name定位:find_element_by_name()
  • tag定位:find_element_by_tag_name()
  • class定位:find_element_by_class_name()
  • link_text定位:find_element_by_link_text()
  • partial_link定位:find_element_by_partial_link_text()
  • XPath定位:find_element_by_xpath()
  • CSS_selector定位:find_element_by_css_selector()
    eg.百度首页
    在这里插入图片描述

id定位搜索框

HTML中,id是唯一的

find_element_by_id("kw")

name定位

find_element_by_name("wd")

class定位

find_element_by_class_name("s_ipt")

tag定位

HTML通过tag来定义不同页面的元素
注意:一个标签往往用来定义一类功能,通过标签识别单个元素的概率很低。

find_element_by_tag_name("input")

link定位

link定位用来定位文本链接
eg.百度输入框上面的几个文字链接代码如下

<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻</a>
<a href="https://www.hao123.com" target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
<a href="http://map.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">地图</a>
<a href="https://haokan.baidu.com/?sfrom=baidu-top" target="_blank" class="mnav c-font-normal c-color-t">视频</a>
<a href="http://tieba.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">贴吧</a>
<a href="http://xueshu.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">学术</a>

通过link定位

find_element_by_link_text("新闻")
find_element_by_link_text("hao123")
find_element_by_link_text("地图")
find_element_by_link_text("视频")
find_element_by_link_text("贴吧")
find_element_by_link_text("学术")

partial link定位

有些文字链接比较长,可以取文字链接的部分文字进行定位

find_element_by_partial_link_text("hao")

对于网页的节点来说,它可以定义 id 、 class 或其他属性。 而且节点之间还有层次关系,在网页中可以通过 XPath 或 css 选择器来定位一个或多个节点 。 那么,在页面解析时,利用 XPath 或 css选择器来提取某个节点,然后再调用相应方法获取它的正文内容或者属性,就可以提取我们想要的任意信息了。

XPath定位

XPath , 全称 XML Path Language ,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言 。它最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索。
XPath使用可以访问官网:https://www.w3.org/TR/xpath

表达式描述
nodename选取此节点的所有子节点
/从当前节点选取直接子节点
//从当前节点选取子孙节点
.选取当前节点
选取当前节点的父节点
@选取属性

通过绝对路径定位

find_element_by_xpath("/html/body/div/div[2]/div/div/form/span/input")

相对路径定位

find_element_by_xpath("//input[@id='kw']")

如果不想指定标签名,可以使用星号(*)代替,而且使用XPath】不局限于id、name和class三个属性值

find_element_by_xpath('//*[@name="wd"]')
find_element_by_xpath('//input[@maxlength="100"]')

使用逻辑运算符

在这里插入图片描述

find_element_by_xpath('//input[@id="kw" and @name="wd"]')

使用contains方法

contains方法用于匹配一个属性中包含的字符串

find_element_by_xpath('//span[contains(@class, "s_ipt")]/input')

使用text()方法

text()用于匹配显示文本信息

find_element_by_xpath("//a[text(), '新闻']")
find_element_by_xpath("//a[contains(text(), '新闻')]")

CSS 定位

CSS选择器常见语法

selectorexampledescription
.class.introclass选择器,选择class="intro"的所有元素
#id#firtnameid选择器,选择id="firstname"的所有元素
**选择所有元素
elementp选择所有

标签元素

element > elementdiv > input选择父元素为
的所有input元素
element + elementdiv + input选择同一级中紧接着div元素之后的所有input元素
[arrtribute=value][target=_blank]选择target="_blank"的所有元素

例如


<span class="bg s_ipt_wr">
	<input id="kw" class="s_ipt" autocomplete="off" maxlength="100" name="wd"/>
</span>
<span class="bg s_btn_wr">
	<input id="su" class="s_btn" type="submit" value="百度一下"/>
</span>

通过class定位

find_element_by_css_selector(".bg.s_ipt")
find_element_by_css_selector(".s_ipt")

id定位

find_element_by_css_selector("#su")

标签名定位

find_element_by_css_selector("input")

属性定位

find_element_by_css_selector("[autocomplete='off']")
find_element_by_css_selector("[name='kw']")

组合定位

find_element_by_css_selector('form#form > span > input#kw')

更多定位用法

  1. 查找属性包含“s_ipt_wr”字符串的元素
find_element_by_css_selector("[class*=s_ipt_wr]")
  1. 查找class属性以“bg”字符串开头的元素
find_element_by_css_selector("[class^=bg]")
  1. 查找class属性以“wrap”字符串结尾的元素
find_element_by_css_selector('[class$=wrap]')
  1. 查找input标签下面的第二个input标签的元素
find_element_by_css_selector("form > input:nth-child(2)")

ps:css选择更多用法:http://www.w3school.com.cn/cssref/css_selectors.asp

用By定位元素

用By定位,需要先导入from selenium.webdriver.common.by import By,使用find_element()方法需要两个参数,第一个参数是定位的类型,第二个是定位的值。

from selenium.webdriver.common.by import By


# id
find_element(By.ID, "kw")
# class
find_element(By.CLASS_NAME, "s_ipt")
# name
find_element(By.NAME, "wd")
# tag
find_element(By.TAG_NAME, "input")
# link
find_element(By.LINK_TEXT, "新闻")
# partial link
find_element(By.PARTIAL_LINK_TEXT, "hao")
# xpath
find_element(By.XPATH, "//span[@id='kw']")
#csss
find_element(By.CSS_SELECTOR, "span.bg s_btn_wr>input#su")

定位一组元素

  • id定位:find_elements_by_id()
  • name定位:find_elements_by_name()
  • tag定位:find_elements_by_tag_name()
  • class定位:find_elements_by_class_name()
  • link_text定位:find_elements_by_link_text()
  • partial_link定位:find_elements_by_partial_link_text()
  • XPath定位:find_elements_by_xpath()
  • CSS_selector定位:find_elements_by_css_selector()
import time
from selenium import webdriver


driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element_by_id("kw").send_keys("python")

driver.find_element_by_id("su").click()

time.sleep(2)

# 定位一组元素
texts = driver.find_elements_by_xpath('//div[@id="content_left"]/div[@cmatchid]')


print(len(texts))  # 5
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值