​Python Selenium查找获取单一元素​element的用法及对应demo

Selenium 获取单一元素(find element)的主要方法有9种。在实际使用中,需要灵活根据实际情况选取不同的方法进行元素获取。

目录

1 根据id进行获取--find_element_by_id

2 根据class进行获取--find_element_by_class_name

3 根据xpath进行获取--find_element_by_xpath

4 根据name进行获取--find_element_by_name

5 根据tag name进行获取--find_element_by_tag_name

6 根据css进行获取--find_element_by_css_selector

9 根据 By+locator定位器 进行获取--find_element


1 根据id进行获取--find_element_by_id

find_element_by_id("元素的id")

例子:获取bing的"国内版"按钮div

bing的"国内版"按钮div为:<div id="est_cn" class="est_common est_selected">国内版</div>

################################################################################
# 在selenium查找该div代码:
driver.get('https://cn.bing.com/')
button_element = driver.find_element_by_id('est_cn')
print(button_element.text) # button_element.text结果为"国内版"

2 根据class进行获取--find_element_by_class_name

find_element_by_class_name("元素的className")

例子:获取bing的"国内版"按钮div

bing的"国内版"按钮class name为'est_common est_selected'

################################################################################
# 由于该class name有空格,不能直接使用如下方法获取
driver.find_element_by_class_name('est_common est_selected') # 报异常NoSuchElementException

# 对于空格情况,取class name其中的一个就行
driver.get('https://cn.bing.com/')
button_element = driver.find_element_by_class_name('est_common')
print(button_element.text) # button_element.text结果为"国内版"

# 或者
driver.get('https://cn.bing.com/')
button_element = driver.find_element_by_class_name('est_selected')
print(button_element.text) # button_element.text结果为"国内版"

注意,在本例中使用class name任意一个也能获取正确结果,但实际使用中需要注意带空格的class name取哪一个的问题。需要取唯一能定位该元素的class name。在class name不唯一的情况,find_element_by_class_name是获取第一个class name符合条件的元素。

3 根据xpath进行获取--find_element_by_xpath

find_element_by_xpath("元素的xpath")

例子:获取bing的"国内版"按钮div

首先获取元素的xpath,可以利用Chrome的开发者工具来进行快速获取

# bing的"国内版"按钮xpath为'//*[@id="est_cn"]' 或者 全xpath为'/html/body/div[2]/div/div[3]/div[2]/div/div[1]'

################################################################################
# 在selenium查找该div代码:
driver.get('https://cn.bing.com/')
button_element = driver.find_element_by_xpath('//*[@id="est_cn"]') #使用xpath
print(button_element.text) # button_element.text结果为"国内版"

# 或者
driver.get('https://cn.bing.com/')
button_element = driver.find_element_by_xpath('/html/body/div[2]/div/div[3]/div[2]/div/div[1]') #使用全xpath
print(button_element.text) # button_element.text结果为"国内版"

4 根据name进行获取--find_element_by_name

find_element_by_name("元素的name")

例子:获取bing提交按钮元素

如下图所示,提交input的name为search

################################################################################
# 在selenium查找提交按钮元素代码:
driver.get('https://cn.bing.com/')
input_element = driver.find_element_by_name('search')
print(input_element.get_attribute('type')) # 结果为'submit'

5 根据tag name进行获取--find_element_by_tag_name

find_element_by_name("元素的tag name")

例子:获取bing的搜索表单form

################################################################################
# 在selenium查找输入表单元素代码:
driver.get('https://cn.bing.com/')
form_element = driver.find_element_by_tag_name('form')
print(form_element.get_attribute('action')) # 结果为'https://cn.bing.com/search'

6 根据css进行获取--find_element_by_css_selector

find_element_by_css_selector("元素的css")

例子:获取bing的"国内版"按钮div

################################################################################
# 在selenium查找输入表单元素代码:
driver.get('https://cn.bing.com/')
# button_element = driver.find_element_by_css_selector('#est_switch .est_selected') #唯一
# button_element = driver.find_element_by_css_selector('#est_switch .est_common') #其实bing中这个css还有"国际版"按钮,但是"国内版"是符合条件的第一个元素,所以最后获取到的还是"国内版"按钮

# 还记得find_element_by_class_name中bing的"国内版"按钮class name为'est_common est_selected'吗?
#其实对于这种带空格的class name,使用find_element_by_css_selector获取更加方便和准确
button_element = driver.find_element_by_css_selector('.est_common.est_selected')
print(button_element.text) # 结果为'国内版'

find_element_by_link_text("链接元素的文本")

例子:

如下图所示,bing首页图片链接的text为“图片”

################################################################################
# 在selenium查找"图片"链接元素代码:
driver.get('https://cn.bing.com/')
link_element = driver.find_element_by_link_text('图片')
print(link_element.text) # 结果为'图片'

find_element_by_partial_link_text("链接元素的部分文本")
################################################################################
# 在selenium查找"图片"链接元素代码:
driver.get('https://cn.bing.com/')
link_element = driver.find_element_by_partial_link_text('图')
# link_element = driver.find_element_by_partial_link_text('片') #这样也可以
print(link_element.text) # 结果为'图片'

9 根据 By+locator定位器 进行获取--find_element

find_element(By_strategy,locator)

 如下图所示,By的属性有By.ID,By.XPATH,By.LINK_TEXT等(其实就是覆盖了前面的8种类型)

例子:获取bing的"国内版"按钮div

################################################################################
# 在selenium查找该div代码:
driver.get('https://cn.bing.com/')

# button_element = driver.find_element(By.ID, 'est_cn')
# button_element = driver.find_element(By.XPATH, '//*[@id="est_cn"]')
button_element = driver.find_element(By.CSS_SELECTOR, '.est_common.est_selected')
print(button_element.text)t) # button_element.text结果为"国内版"

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值