Selenium爬虫元素定位

What is 元素定位?

什么是元素?HTML文件中的一个组成单元,包括文字,图画,视频等等…在Selenium中提供了8中元素定位方法,如下表所示:

定位方式对应方法
IDdriver.find_element(By.ID, value = ‘su’)
namedriver.find_element(By.NAME, value = ‘wd’)
class namedriver.find_element(By.CLASS_NAME, ‘s_ipt’)
tag namedriver.find_element(By.TAG_NAME, ‘title’)
link textdriver.find_element(By.LINK_TEXT, ‘su’)
partial link textdriver.find_element(By.PARTIAL_LINK_TEXT, ‘wd’)
xpathdriver.find_element(By.XPATH, ‘s_ipt’)
css selectordriver.find_element(By.CSS_SELECTOR, ‘title’)

from selenium.webdriver.common.by import By别忘了加

根据ID定位

怎么找一个元素的ID?通过开发者界面找到对应的id,如百度的搜索框id为“kw”,“百度一下”的按钮的id为“su“,如果要对百度网页进行搜索操作,就可以使用如下代码:
怎么找
在这里插入图片描述

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#通过id查找并且输入要查找的字眼
driver.find_element(by = By.ID,value = "kw").send_keys("王俊凯")
#点击百度一下
driver.find_element(by = By.ID,value ="su").click()

代码中send_keys()是一个向搜索框发出特定字符串的方法,click()是向某个特定的HTML元素发送确认请求的方法
然后就会看见它自动到了这个界面:
在这里插入图片描述
接下来说说怎么找到对应的ID呢?首先点击chrome浏览器页面右上角的三个点,选择更多工具中的开发者工具,点击工具栏左上角中一个有鼠标图案的地方,然后将鼠标放在你想看的区域,点击确认,即可看见相应的源码。
在这里插入图片描述

根据name定位

ID和name看上去一样,但是还是有区别的。ID相当于是一个人的身份证号码,而name就是他的名字。就可以发现,ID是唯一的,但是name可以重复。还是举前面的例子,百度搜索栏的name是”wd“,所以上文中的driver.find_element(by = By.ID,value = "kw").send_keys("王俊凯")应该替换为driver.find_element(by = By.NAME,value = "wd").send_keys("王俊凯")

根据XPATH定位

这篇博客里比较详细地介绍了Xpath定位的方法:Xpath定位的两种方法
简单来说,就是用前面讲过的方法打开像定位元素的源码,右键点击,选中copy,接着点击最下面的Copy full Xpath或者Copy Xpath,代码如下所示。
这个是full Xpath:

driver.find_element(by = By.XPATH,value = "/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input").send_keys("王俊凯")

这个是Xpath:

driver.find_element(by = By.XPATH,value = r'//*[@id="kw"]').send_keys("王俊凯")

这里有个小问题,使用copy Xpath时copy下来的是//[@id=“kw”],要r’//[@id=“kw”]‘这样写,不能直接用"//*[@id=“kw”]",因为会有语法错误,要使用r’'转义,同时要将这个单引号和XPath的双引号进行区分,避免出错。

根据标签名(Tag name)定位

这种方式因为存在很多一样的标签,经常会定位失败,只需要了解有这么种方法就ok,这里就不学了。

根据Class name定位

好吧,感觉这个不是很好用,以后要用到的时候再说吧。。。。。

根据CSS选择器定位

以百度搜索框为例,前面已经知道了百度搜索框的name为wd,id为kw

  • [name=wd] : 表示选择所有name属性为wd的元素
  • #kw : 选择id为kw的元素
  • a[src^=“http”] : 选择所有以http作为src开头的元素
  • “html>body>form>span>input”:从标签html中选出标签body,以此类推直到input标签
  • .s_ipt :选择所有class属性为.s_ipt的标签,不要忽略.

根据Link Text定位

Link Text定位的是带有超链接的文字
使用语法:driver.find_element(By.LINK_TEXT,value= ‘[text]’)

time.sleep(2)
driver.find_element(by = By.LINK_TEXT ,value = "视频").click()
driver.back()

根据Partial Link Text

如果不想打完搜索的全部字符,就可以使用这种方法,语法为:
driver.find_element(By.PARTIAL_LINK_TEXT,value= “[text]”)
如以下示例代码:

time.sleep(2)
driver.find_element(by = By.PARTIAL_LINK_TEXT ,value = "新").click()
driver.back()

总结

总体来说,id和class定位最为方便,但是Link Text最为实用,XPATH也算比较好用,根据实际情况判断。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值