selenium+chromedriver操作浏览器获取动态数据python爬虫入门进阶(13)

Posted 码农飞哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium+chromedriver操作浏览器获取动态数据python爬虫入门进阶(13)相关的知识,希望对你有一定的参考价值。

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
😁 1. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
💪🏻 2. Python基础专栏,基础知识一网打尽。 Python从入门到精通
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
关注下方公众号,众多福利免费嫖;加我VX进群学习,学习的路上不孤单

为啥写这篇文章?

上篇文章我们介绍了如何用多线程的方式来提高爬虫效率。还没看的小伙伴可以补看一波。
用生产者消费者模式爬取斗图吧,一次性收获超多表情包【python爬虫入门进阶】(11)
为了方便大家更好的学习交流,我这边建了个Python学习交流群,一群已满。

软件环境

软件版本
电脑系统mac
Chrome96.0.4664.93
chromedriver96.0.4664.18

selenium是什么

这篇文章我们将介绍Selenium这个技术,该技术可以模拟人类在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等等。一句话总结Selenium相当于一个机器人。
当然,这个机器人必须要有驱动程序去驱动浏览器,不同浏览器上需要不同的驱动程序,在Chrome浏览器上的驱动程序是Chromedriver,只有使用它才能驱动浏览器。

不同浏览器上的driver下载地址

谷歌浏览器驱动下载地址:https://chromedriver.storage.googleapis.com/index.html
火狐浏览器驱动下载地址:https://github.com/mozilla/geckodriver/releases/
PhantomJS驱动下载地址:http://phantomjs.org/download.html
IE浏览器下载地址:http://selenium-release.storage.googleapis.com/index.html

以Chrome浏览器为例

这里需要特别注意的是:要根据当前你Chrome浏览器的版本下载对应版本的chromedriver
比如:我这里Chrome浏览器的版本是:96.0.4664.93,如下图1所示

我就需要下载:96.0.4664.18 版本下的chromedriver驱动。如下图2所示:

点进96.0.4664.18 目录里,以看到不同系统对应不同的安装包,这里我的电脑系统是mac系统,所有我选择了chromedriver_mac64.zip 压缩包。如下图3所示:

如果你不按照版本来对应下载的话,就有可能会出现如下图4所示的错误:

给chromedriver配置环境变量

解压之后可以得到chromedriver程序,将该程序放在/usr/local/bin/ 目录下。
这里以Mac系统为例进行说明:

  1. 打开终端输入:vim ~/.bash_profile 命令,向.bash_profile文件中写入如下配置。按i进入编辑状态,
alias chromedriver='/usr/local/bin/chromedriver'


编辑完成之后按esc 退出编辑。然后,输入:wq! 保存编辑结果。
3. 接着在终端输入 source ~/.bash_profile 使得环境变量生效。

使用selenium

安装selenium

在使用selenium之前还是需要通过pip安装一下selenium包。安装命令如下:

pip install selenium

安装好之后就是导入包进行使用了。

from selenium import webdriver

# 调用环境变量指定的
# driver = webdriver.Chrome()
# 如果没有在环境变量指定Chromedriver的位置
executable_path = '/usr/local/bin/chromedriver'
driver = webdriver.Chrome(executable_path=executable_path)
driver.get("http://www.baidu.com")
# 打印获取到页面源码
print(driver.page_source)

如果没有在环境变量中指定chromedriver的位置,那么在调用webdriver.Chrome 方法时就需要在executable_path参数中传入Chromedriver的位置。
如果在前面给chromedriver配置了环境变量,则直接调用driver = webdriver.Chrome() 方法即可。
这里通过selenium打卡Chrome浏览器,并访问百度首页。运行后的效果如下图5所示:通过selenium打卡的浏览器窗口会有Chrome 正收到自动测试软件的控制 的提示。

selenium的常用操作

更多详细的操作可以看官方文档

关闭页面

#关闭当前页面
driver.close()
#退出整个浏览器
driver.quit()

定位页面元素

定位页面元素的方法统一调用driver.find_element 方法,其语法结构是:

find_element(self, by=By.ID, value=None)

默认是根据ID查找元素,value 指定的是查找的关键字。
如图6所示,点击查看By类的源代码可以看到

1. 根据id来查找某个元素

根据id来查找某个元素只需要将by的值传入为By.ID。这里的id指的是标签的id属性。

from selenium.webdriver.common.by import By
# 根据ID查找某个元素
driver.get("https://so.csdn.net/so/search")
input_tag = driver.find_element(by=By.ID, value='keyword')
input_tag.send_keys('码农飞哥,爬虫')

这里以CSDN的搜索框为例,找到搜索框元素的id是keyword。send_keys 方法用于向匹配到的元素输入关键字。运行之后得到的效果如下图7

2.根据类名查找元素

这里的类名指的是标签的class属性。如下图8所示现有标签元素<div class="profile-intro-name-boxTop"> ,我们就可以通过类名来找到这个标签元素。传入的by参数是By.CLASS_NAME。

driver.get("https://blog.csdn.net/u014534808")
tag = driver.find_element(by=By.CLASS_NAME, value='profile-intro-name-boxTop')
print(tag.text)

运行结果如下图8所示:

3. 根据name属性的值来查找元素

driver.get("https://blog.csdn.net/u014534808")
tag = driver.find_element(by=By.NAME, value='report')
print(tag)

4. 根据标签名来查找元素

5. 根据xpath语法来获取元素

driver.get("https://blog.csdn.net/u014534808")
feige_tag = driver.find_element(by=By.XPATH,
                                value='//div[@class="profile-intro-name-boxFooter"]//a')
print(feige_tag.text)
driver.close()

运行结果是:

这里需要注意的是不能提取到标签的某个属性。比如://div[@class="profile-intro-name-boxFooter"]//a/@href 这样会报错的。因为这个方法选择的是元素。

6. 根据css选择器选择元素

需要注意的是,find_element 是获取第一个满足条件的元素,find_elements 是获取所有满足条件的元素。

driver.get("https://blog.csdn.net/u014534808")
class_tags = driver.find_element(by=By.CSS_SELECTOR, value='.article-list .article-item-box')
print(class_tags)

总结

本文简单介绍了selenium的使用

粉丝专属福利

软考资料:实用软考资料

面试题:5G 的Java高频面试题

学习资料:50G的各类学习资料

脱单秘籍:回复【脱单】

并发编程:回复【并发编程】

											👇🏻 验证码 可通过搜索下方 公众号 获取👇🏻 

以上是关于selenium+chromedriver操作浏览器获取动态数据python爬虫入门进阶(13)的主要内容,如果未能解决你的问题,请参考以下文章

selenium使用ChromeDriver

谷歌浏览器加载驱动(chromedriver)——selenium

C# + Selenium + ChromeDriver 爬取网页

Python3.5+selenium操作Chrome浏览器

Python3.5+selenium操作Chrome浏览器

selenium自动化操作浏览器(火狐)