【爬虫基础】自动化工具 Selenium 的使用

news/2024/7/19 8:40:54 标签: 爬虫, 自动化, selenium

目录

前言

Selenium 的基本使用

(1)使用 Selenium 打开网页

(2)使用 Selenium 模拟登录

(3)使用 Selenium 模拟翻页

Selenium 的进阶使用

(1)使用 Chrome 开发者模式

(2)添加代理

(3)使用无头浏览器

总结



前言

Selenium 是一个开源的自动化测试工具,支持各种浏览器,并且可以模拟用户对浏览器的各种操作。在爬虫开发中,Selenium 可以用来模拟人类用户的点击、输入等行为,从而实现自动化爬取网页的目的。

Selenium 的基本使用

在使用 Selenium 之前,需要先安装 Selenium 库和对应的浏览器驱动。Selenium 可以支持多种浏览器,每种浏览器需要下载对应的浏览器驱动。安装方法可以参考官方文档:https://www.selenium.dev/documentation/en/getting_started_with_webdriver/browsers/

(1)使用 Selenium 打开网页

下面是使用 Selenium 打开百度首页的代码:

from selenium import webdriver

# 打开浏览器
browser = webdriver.Chrome()

# 打开百度首页
url = 'https://www.baidu.com/'
browser.get(url)

# 关闭浏览器
browser.quit()

其中,webdriver.Chrome() 表示使用 Chrome 浏览器,如果要使用其他浏览器,则需要更改这里的代码。browser.get(url) 表示打开网页。最后使用 browser.quit() 关闭浏览器。

(2)使用 Selenium 模拟登录

下面是使用 Selenium 模拟登录知乎的代码:

from selenium import webdriver

username = 'your_username'
password = 'your_password'

# 打开浏览器
browser = webdriver.Chrome()

# 打开知乎登录页面
url = 'https://www.zhihu.com/signin'
browser.get(url)

# 输入用户名和密码
input_name = browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[1]/div[2]/div/form/div[1]/div[2]/div[1]/input')
input_name.send_keys(username)
input_password = browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[1]/div[2]/div/form/div[1]/div[2]/div[2]/input')
input_password.send_keys(password)

# 点击登录按钮
btn_submit = browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[1]/div[2]/div/form/button')
btn_submit.click()

# 关闭浏览器
browser.quit()

其中,find_element_by_xpath() 方法可以根据 XPath 获取元素,send_keys() 方法可以输入文本,click() 方法可以模拟点击。这里只是一个简单的示例,实际网站可能需要更复杂的操作。

(3)使用 Selenium 模拟翻页

下面是使用 Selenium 模拟翻页豆瓣电影 TOP250 的代码:

from selenium import webdriver

# 打开浏览器
browser = webdriver.Chrome()

# 打开豆瓣电影 TOP250
url = 'https://movie.douban.com/top250'
browser.get(url)

# 获取下一页按钮
btn_next = browser.find_element_by_xpath('//*[@id="content"]/div/div[1]/div[2]/a[3]')

# 翻页
while True:
    # 获取所有电影信息
    movies = browser.find_elements_by_xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]')

    # 输出电影名称
    for movie in movies:
        print(movie.text)

    # 判断是否到达最后一页
    if btn_next.get_attribute('class') == 'next':
        btn_next.click()
    else:
        break

# 关闭浏览器
browser.quit()

其中,find_elements_by_xpath() 方法可以获取多个元素,get_attribute() 方法可以获取元素的属性。这里使用了一个 while 循环来不断翻页,直到到达最后一页为止。

Selenium 的进阶使用

除了基本使用外,Selenium 还有一些进阶的用法,例如使用 Chrome 开发者模式、添加代理、使用无头浏览器等。

(1)使用 Chrome 开发者模式

Chrome 开发者模式可以让开发者更方便地进行调试和测试,其中就包括了 Selenium 的自动化测试。使用 Chrome 开发者模式可以更直接地获取元素的 XPath 或 CSS Selector 等信息,以便 Selenium 使用。

使用方式如下:

from selenium import webdriver

# 打开 Chrome 开发者模式
options = webdriver.ChromeOptions()
options.add_experimental_option('debuggerAddress', '127.0.0.1:9222')
browser = webdriver.Chrome(options=options)

# 获取页面元素
# ...

# 关闭浏览器
browser.quit()

其中,'debuggerAddress': '127.0.0.1:9222' 表示使用 Chrome 开发者模式,9222 是 Chrome 调试的端口号。使用 Chrome 开发者模式后,浏览器会自动打开并进入调试模式,此时可以直接在浏览器中操作获取元素的 XPath 或 CSS Selector 等信息。

(2)添加代理

爬虫开发中可能需要使用代理来爬取一些需要登录或者限制 IP 的网站。Selenium 可以方便地使用代理,只需要在 ChromeOptions 中设置即可。

使用方式如下:

from selenium import webdriver

proxy = '127.0.0.1:8080'

# 设置代理
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://' + proxy)
browser = webdriver.Chrome(options=options)

# 获取页面元素
# ...

# 关闭浏览器
browser.quit()

其中,'--proxy-server=http://' + proxy 表示设置代理服务器的地址和端口号,此处的 proxy 可以是一个 IP 地址或者域名。

(3)使用无头浏览器

爬虫开发中,有时候不需要真正地打开浏览器,只需要获取网页源码即可。这时候可以使用无头浏览器,它可以在后台执行并获取网页源码,不会弹出浏览器窗口。

使用方式如下:

from selenium import webdriver

# 使用无头浏览器
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
browser = webdriver.Chrome(options=options)

# 获取页面源码
url = 'https://www.baidu.com/'
browser.get(url)
page_source = browser.page_source

# 关闭浏览器
browser.quit()

其中,'--headless' 表示使用无头浏览器,'--disable-gpu' 表示禁用 GPU 加速。使用无头浏览器后,需要使用 browser.page_source 属性获取页面源码。

总结

以上就是 Selenium 的基本使用和进阶用法,Selenium 可以方便地模拟用户行为,实现自动化爬取网页的目的。当然,使用 Selenium 也有一些缺点,例如速度较慢、需要占用较多的系统资源等,使用时需要注意。


http://www.niftyadmin.cn/n/5265731.html

相关文章

简约大气视频制作模板PR剪辑素材PR项目工程文件

Premiere Pro模板,简约大气视频剪辑素材PR项目工程文件(包含手机竖屏分辨率),包含24个媒体占位符和9个文本占位符。可以编辑和自定义文本占位符和媒体占位符。用来展示照片视频制作。包含视频教程。 来自PR模板网:http…

教师如何与成绩差的学生进行有效沟通

与成绩差的学生进行有效沟通通常需要一定的技巧和策略。以下是一些建议,可帮助教师与成绩差的学生建立良好的沟通,并提供适当的支持和激励。 1. 建立信任和尊重:与学生进行沟通时,表现出对他们的尊重和关心。给予他们足够的信任&…

纳管虚拟化 | ZStack Cube超融合一体机助力南京财经高职校智慧校园

数字经济正加速推动各行各业的高质量升级发展,云计算是数字经济的核心底层基础设施。作为云基础软件企业,云轴科技ZStack 坚持自主创新,自研架构,产品矩阵可全面覆盖数据中心云基础设施,针对虚拟化资源实现纳管、替代和…

SpringCloud微服务 【实用篇】| Docker启示录

目录 一:Docker启示录 1. Docker启示录 2. Docker和虚拟机的区别 3. Docker架构 4. Centos7安装Docker 4.1. 卸载 4.2. 安装docker 4.3. 启动docker 4.4. 配置镜像加速 前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽…

ntp时间同步配置中 server、pool和peer的区别

在 NTP(Network Time Protocol)的配置中,server、pool 和 peer 是用于指定时间同步关系的关键字,它们在角色和行为上有一些区别。 server: server 关键字用于指定一个或多个 NTP 服务器,这些服务器将提供时…

第二章算法

2.1启示 算法: 2.2算法的特性 2.3算法设计的要求 正确性. 可读性. 健壮性. 时间效率高和存储量低. 2.4算法效率的度量方法 事后统计方法 事前分析估算法 2.5函数的渐近增长 注:判断一个算法的效率时,函数的常数和其他次要项常常可以忽略&a…

区块链:改变世界的技术

一、引言 区块链,这个曾经看似神秘且遥不可及的词语,如今已经深入人心,成为我们生活的一部分。它以其独特的去中心化、分布式、不可篡改的特性,正在改变我们的生活方式,甚至改变我们的思维方式。本文将深入浅出地解释…

【贪心】LeetCode-11. 盛最多水的容器

盛最多水的容器。 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不…