python + selenium 选择元素的几种方法详解

本文详细介绍了使用Python的Selenium库进行网页元素定位的各种方法,包括通过id、class_name、name、xpath、tag_name、link_text、partial_link_text以及css_selector定位单个元素,还讲解了复数定位方法以及如何使用jQuery选择器进行更灵活的定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,基本8种定位方法

以百度网站为例


<span class="bg s_ipt_wr quickdelete-wrap">
    <span class="soutu-btn"></span>
    <input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
    <a id="quickdelete" class="quickdelete" href="javascript:;" title="清空" style="top: 0px; right: 0px; display: none;"></a>
</span>
<span class="bg s_btn_wr">
    <input id="su" class="bg s_btn" type="submit" value="百度一下">
</span>

# 通过id 查找

find_element_by_id()

# 通过class name 和 name 查找

find_element_by_name() 

find_element_by_class_name()

根据name元素和class的名字进行定位,这两种定位方式和id定位相似,在前端代码中,id、name和class一般都至少会有其中的一种,比如百度的搜索框具有name属性,我们可以用name定位搜索款,class定位百度一下的按钮


from selenium import webdriver
import time
from selenium.webdriver.common.by import By
 
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
 
driver.find_element_by_id("kw").send_keys("Selenium")
driver.find_element_by_id("su").click()
 
time.sleep(2)
driver.quit(

# 通过xpth 查找

find_element_by_xpath()

xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素的路径来完成对元素的查找。HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。
xpath也分几种不同类型的定位方法。

一种是绝对路径定位。这种定位方式是利用html标签名的层级关系来定位元素的绝对路径,一般从<html>标签开始依次往下进行查找。
如百度搜索框的绝对路径xpath定位可以是这样的:
 

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

 

# 通过tag_name查找

find_element_by_tag_name ()

通过标签名去定位的方式一般是这样的:find_element_by_tag_name("input") 
可见仅仅通过标签名去定位时,一般一种标签在一个页面里面会出现不止一次甚至大量出现,这种定位方式的作用不是很大,所以用的也就比较少。

#通过链接定位查询,这两种定位方式是专门用于定位超链接的

find_element_by_link_text()
find_element_by_partial_link_text()

这两种定位方式是专门用于定位超链接的,也就是对应html页面中的<a>标签,括号里传的值就是a标签中的超链接文字,两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字。
比如点击百度首页中右上角的新闻超链接,可以这样去定位:

driver.find_element_by_link_text("新闻").click()
driver.find_element_by_partial_link_text("闻").click()

find_element_by_css_selector() 

CSS属性定位可以比较灵活地选择控件的任意属性,定位方式也会比xpath快。


driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")
driver.find_element_by_css_selector("#su").click()

同样是那个百度搜索的例子,可以试一下:

二,elements复数定位

id复数定位find_elements_by_id()


name复数定位find_elements_by_name()


class复数定位find_elements_by_class_name()


tag复数定位find_elements_by_tag_name()


link复数定位find_elements_by_link_text()


partial_link复数定位find_elements_by_partial_link_text()


xpath复数定位find_elements_by_xpath()


css复数定位find_elements_by_css_selector()


这些复数定位方式每次取到的都是具有相同类型属性的一组元素,所以返回的是一个list队列,我们也可以利用这个去定位单个的元素。

例如:百度首页种,右上角有新闻、视频、地图、贴吧等一些链接,我们通过f12查看源码可以发现,这些链接都有共同的class, class="mnav"。

举个例子,比如定位排在第六个的学术,可以这样定位:driver.find_elements_by_class_name("mnav")[5].click()  #单独定位

还可以通过css的复数定位写法:driver.find_elements("css selector",".mnav")[6].click()   #单独定位

当然,也可以借助pop()函数,一般pop()或pop(-1)表示获取元素种的最后一个,pop(2)表示第三个:

driver.find_elements("css selector",".mnav").pop().click()   #单独定位

三,超神的jQuery定位

先了解一下css选择器的内容:

jquery选择器

例:

from selenium import webdriver 
from time import sleep

dr = webdriver.Chrome() 
dr.get(“https://www.jianshu.com/sign_in“) 
sleep(2)

”’ 
JQuery定位:$(‘css_selector的语法’).操作方式

操作方式 .val(“值”) .click() 
”’

**#1、根据id定位 
jq_userName = “$(‘#session_email_or_mobile_number’).val(‘userName’)” 
dr.execute_script(jq_userName) 
sleep(2)

**#2、根据type定位 
jq_userName2 = “$(‘:text’).val(‘type’)” 
dr.execute_script(jq_userName2) 
sleep(2)

**#3 根据class定位 
**#jq_loginBtn = “$(‘.sign-in-button’).click()” 
**#dr.execute_script(jq_loginBtn)

**#4、按层级定位 
**#带有标签的层级定位

jq_userName3 = “$(‘div.input-prepend.restyle.js-normal > input#session_email_or_mobile_number’).val(‘userName3’)” 
dr.execute_script(jq_userName3) 
sleep(2)

**#2)不带有标签的层级定位 
jq_userName4 = “$(‘.input-prepend.restyle.js-normal > #session_email_or_mobile_number’).val(‘userName4’)” 
dr.execute_script(jq_userName4) 
sleep(2)

**#3)、不带层次符 
jq_userName5 = “$(‘.input-prepend.restyle.js-normal #session_email_or_mobile_number’).val(‘userName5’)” 
dr.execute_script(jq_userName5) 
sleep(2)

**#4)、选择最后一个元素 
jq_userName6 = “$(‘div.input-prepend.restyle.js-normal > input:last’).val(‘userName6’)” 
dr.execute_script(jq_userName6) 
sleep(2)

**#5)、选择指定元素 标签:eq(索引位) – 从0开始 
jq_userName7 = “$(‘div.input-prepend.restyle.js-normal > input:eq(0)’).val(‘userName7’)” 
dr.execute_script(jq_userName7) 
sleep(2)

**#6)、选择指定元素 标签:nth-child(序号) – 从1开始 
jq_userName8 = “$(‘div.input-prepend.restyle.js-normal > input:nth-child(1)’).val(‘userName8’)” 
dr.execute_script(jq_userName8)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值