(一) 前言
:前面已经介绍了selenium的基本安装与相关的简单使用,本篇博客将以定位元素讲解为主,以爬虫示例为辅,带大家慢慢深入selenium与爬虫的知识海洋,冲!
注意!注意!注意!:
selenium自动化加载浏览器后,只要你能在F12开发者工具中能够审查到的元素就能直接获取,不用像普通爬虫一样麻烦,不需要考虑js动态渲染等问题,这也是我爱上selenium的原因之一!!!
(二)定位元素八种方式
定位元素在爬虫领域十分常用并重要,因此掌握基本的定位知识会帮你大大降低学习爬虫的难度,selenium在定位元素方面提供了八种定位方式:
- id
- name
- class name
- tag name
- link text
- partial link text
- xpath
- css selector
定位单个元素 | 定位多个元素(以列表形式返回) | 含义 |
---|---|---|
find_element_by_id | find_elements_by_id | 通过元素id定位 |
find_element_by_name | find_elements_by_name | 通过元素name定位 |
find_element_by_xpath | find_elements_by_xpath | 通过xpath表达式定位 |
find_element_by_link_text | find_elements_by_link_text | 通过完整文本值定位 |
find_element_by_partial_link_text | find_elements_by_partial_link_text | 通过部分文本值定位 |
find_element_by_tag_name | find_elements_by_tag_name | 通过标签定位 |
find_element_by_class_name | find_elements_by_class_name | 通过类名进行定位 |
find_elements_by_css_selector | find_elements_by_css_selector | 通过css选择器进行定位 |
(三)定位元素实例
声明:本次测试网站(仅供测试,勿作商业用途)
豆瓣top250:https://movie.douban.com/top250
右击鼠标右键获取网页源代码分析元素:
本次就以此网页源代码作定位元素展示
1.通过元素id定位
定位方式:find_element_by_id(定位多个元素就不做多赘述,有兴趣的可以自行测试)
定位前确定要定位的元素id:
代码及结果展示:
from selenium import webdriver
driver=webdriver.Chrome()# 获取Chrome浏览器对象
#driver=webdriver.Firefox() 获取火狐浏览器对象
driver.get(url="https://movie.douban.com/top250") #加载浏览器,打开网页窗口
dr=driver.find_element_by_id("inp-query").get_attribute("placeholder") #get_attribute为获取属性的方法
print(dr) #打印属性为"placeholder"的属性值
当然,其他属性你也可以以同样方式获取
2.通过元素name定位
定位方式:find_element_by_name(定位多个元素就不做多赘述,有兴趣的可以自行测试)
定位前确定要定位的元素name:
代码及结果展示:
from selenium import webdriver
driver=webdriver.Chrome()# 获取Chrome浏览器对象
#driver=webdriver.Firefox() 获取火狐浏览器对象
driver.get(url="https://movie.douban.com/top250") #加载浏览器,打开网页窗口
dr=driver.find_element_by_name("cat").get_attribute("value")
print(dr)
3.通过xpath表达式定位(本人最喜欢)
xpath相关知识:https://www.runoob.com/xpath/xpath-tutorial.html
(不要担心,即使不懂你也可以用)
定位方式:find_element_by_xpath(定位多个元素就不做多赘述,有兴趣的可以自行测试)
定位前确定要定位的元素xpath表达式:
怎么获取xpath表达式?你只需要右击上面红色箭头所指处,点击copy,就有获取本元素的xpath表达式
本标签xpath://*[@id=“content”]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]
代码及结果展示
from selenium import webdriver
driver=webdriver.Chrome()# 获取Chrome浏览器对象
#driver=webdriver.Firefox() 获取火狐浏览器对象
driver.get(url="https://movie.douban.com/top250") #加载浏览器,打开网页窗口
dr=driver.find_element_by_xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]')
print(dr.text) #注意通过xpath获取的是元素对象,需要text属性才能获取值
4.通过标签定位
定位方式:find_elements_by_tag_name(通过标签定位单个元素基本不用,因此这里用定位多个元素)
定位前确定要定位的元素标签:<span>
**注意注意!**网页里有很多<span>标签,因此你需要精确知道位置才行,所以一般不推荐
代码及结果展示
from selenium import webdriver
import time
driver=webdriver.Chrome()# 获取Chrome浏览器对象
#driver=webdriver.Firefox() 获取火狐浏览器对象
driver.get(url="https://movie.douban.com/top250") #加载浏览器,打开网页窗口
time.sleep(2)
dr=driver.find_elements_by_tag_name("span")
for i in dr[3:6]:
print(i.text)
注意,获取多个标签时返回的是列表形式!!!
(四)建议和展望
本次示例并没给全,希望小伙伴们自行尝试,如果有疑问,可以在评论区留下你的疑惑,博主将会耐心解答
在后续文章,将会详细阐述selenium的使用方法及与爬虫的相关结合使用,关注我吧
好了,本次文章就到这里,我们下期再见!