【Python爬虫开发基础⑩】selenium概述

这篇具有很好参考价值的文章主要介绍了【Python爬虫开发基础⑩】selenium概述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏:python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~
💡往期推荐
⭐️前面比较重要的基础内容
【Python爬虫开发基础⑥】计算机网络基础(Web和HTTP)
【Python爬虫开发基础⑦】urllib库的基本使用
【Python爬虫开发基础⑧】XPath库及其基本用法
【Python爬虫开发基础⑨】jsonpath和BeautifulSoup库概述及其对比
⭐️爬虫的实战文章
【Python爬虫开发实战①】使用urllib以及XPath爬取可爱小猫图片
【Python爬虫开发实战②】使用urllib以及jsonpath爬取即将上映电影信息
大家可以复制代码感受一下爬虫的魅力~
💡本期内容:本期我们要讲一个爬虫常用的库:requests,它的功能能够完全覆盖urllib,并且要比urllib简单易操作,下面我们马上开始吧!



1 关于selenium

1.1 什么是selenium?

Selenium是一种用于自动化浏览器操作的工具。它可以模拟用户在浏览器中的各种操作,例如点击、填写表单、提交等,以及获取页面上的数据。相比传统的基于HTTP请求的爬虫,Selenium更适合处理需要JavaScript执行的动态网页。

Selenium通常与Web驱动程序配合使用,例如ChromeDriver或GeckoDriver,用于控制真实的浏览器实例。通过Selenium,开发者可以编写脚本来模拟用户和浏览器之间的交互,从而爬取并处理网页上的内容。

使用Selenium爬虫可以解决一些传统爬虫无法应对的场景,如需要登录操作、有验证码的页面、使用JavaScript渲染的动态网页等。然而,由于使用了浏览器进行模拟操作,Selenium爬虫也会面临性能较慢、资源消耗较高的问题。因此,在选择使用Selenium爬虫时需要权衡其优缺点,并根据具体需求做出合理的选择。

1.2 为什么要使用selenium?

有几个主要的原因:

  • 动态网页爬取:传统的基于HTTP请求的爬虫对于动态生成内容的网页往往无法完全获取到想要的数据。Selenium可以模拟用户在浏览器中的行为,包括执行JavaScript代码,从而可以获取到通过JavaScript生成的内容。

  • 用户交互模拟:某些网站可能需要用户登录、填写表单、点击按钮等操作才能访问或获取数据。Selenium可以模拟这些用户交互行为,自动完成各种操作,并获取页面上的数据。

  • 解决验证码问题:一些网站为了防止机器人爬虫,会添加验证码验证机制。使用Selenium,可以通过模拟用户在网页上输入验证码来绕过这个限制。

  • 页面渲染 JavaScript:某些网页使用JavaScript进行内容渲染,传统的爬虫无法执行JavaScript并获取最终渲染结果。Selenium可以驱动浏览器执行JavaScript脚本,获取渲染后的页面内容。

尽管Selenium可以解决许多爬虫面临的问题,但它也有一些缺点,包括启动和加载时间较长、消耗更多的资源、性能较慢等。因此,在选择是否使用Selenium时,需要根据具体需求和情况评估其适用性和代价。

1.3 如何安装selenium?

  1. 操作谷歌浏览器驱动下载地址:
    http://chromedriver.storage.googleapis.com/index.html
  2. 谷歌驱动和谷歌浏览器版本之间的映射表:
    http://blog.csdn.net/huilan_same/article/details/51896672
  3. 查看谷歌浏览器版本
    谷歌浏览器右上角三个点—帮助—关于
  4. 通过cmd安装
pip install selenium

2 selenium使用步骤

首先,将上面下载好的驱动,放到一个固定的文件夹,方便后面使用,这里假设我们放到了D盘

  • 导入模块

首先,我们需要导入selenium库。在Python中,可以使用以下语句导入selenium库:

from selenium import webdriver
  • 创建WebDriver对象

接下来,我们需要创建一个WebDriver对象。WebDriver对象是Selenium的核心组件,用于控制浏览器。我们可以使用以下语句创建一个Chrome浏览器的WebDriver对象:

driver = webdriver.Chrome()
  • 定位元素

在创建好WebDriver对象之后,我们需要定位页面上的元素。Selenium提供了多种定位元素的方法,如通过ID、名称、类名、标签名、链接文本等。下面是一个示例,演示如何通过ID定位元素:

element = driver.find_element_by_id("element_id")
  • 执行操作

有了定位到的元素,我们就可以对其进行各种操作了。例如,输入文本、点击按钮等。这里以输入文本为例:

element.send_keys("Hello, World!")

3 常用Selenium方法

  • find_element_by_*方法及其用法

包括用id、name、class name、tag name、link text 、css、xpath等定位元素

# 通过id定位元素
element = driver.find_element_by_id("element_id")

# 通过name定位元素
element = driver.find_element_by_name("element_name")

# 通过class name定位元素
element = driver.find_element_by_class_name("element_class")

# 通过tag name定位元素
element = driver.find_element_by_tag_name("element_tag")

# 通过link text定位元素
element = driver.find_element_by_link_text("link_text")

# 通过partial link text定位元素
element = driver.find_element_by_partial_link_text("partial_link_text")

# 通过css selector定位元素
element = driver.find_element_by_css_selector("css_selector")

# 通过XPath定位元素
element = driver.find_element_by_xpath("xpath")
  • find_elements_by_*方法及其用法
# 通过id定位多个元素
elements = driver.find_elements_by_id("element_id")

# 通过name定位多个元素
elements = driver.find_elements_by_name("element_name")

# 通过class name定位多个元素
elements = driver.find_elements_by_class_name("element_class")

# 通过tag name定位多个元素
elements = driver.find_elements_by_tag_name("element_tag")

# 通过link text定位多个元素
elements = driver.find_elements_by_link_text("link_text")

# 通过partial link text定位多个元素
elements = driver.find_elements_by_partial_link_text("partial_link_text")

# 通过css selector定位多个元素
elements = driver.find_elements_by_css_selector("css_selector")

# 通过XPath定位多个元素
elements = driver.find_elements_by_xpath("xpath")
  • click() 方法
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 定位到响应的元素
element = driver.find_element(By.ID, "example_id")
# 点击元素
element.click()
  • submit() 方法

submit() 方法的作用:模拟表单提交操作。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com/form")
element = driver.find_element(By.ID, "example_id")
# 提交表单
element.submit()
  • clear() 方法

clear() 方法的作用:清除输入框的内容。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com/input")
element = driver.find_element(By.ID, "example_id")
# 清除输入框的内容
element.clear()
  • send_keys() 方法

send_keys() 方法的作用:向输入框发送文本。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get("https://www.example.com")
username_input = driver.find_element_by_name("username")
password_input = driver.find_element_by_name("password")

# 在用户名输入框中输入文本 "testuser" 并提交表单
username_input.send_keys("testuser")
password_input.send_keys("testpassword")

# 按回车键提交表单
password_input.send_keys(Keys.RETURN)  

# 等待页面加载完成
time.sleep(5)  

driver.quit()

其中,element 是 WebElement 对象,表示要向其发送文本的元素;text 是字符串类型,表示要发送的文本内容。最后,按回车键提交表单并关闭浏览器。


4 WebDriver管理与异常处理

4.1 为什么需要管理多个WebDriver实例?

  • 并发测试:在并发测试中,我们需要同时操作多个浏览器窗口或标签页,以模拟用户在实际使用场景中的操作。

  • 不同环境(如开发、测试、生产)使用不同的WebDriver实例:为了确保测试的准确性和稳定性,我们需要为不同的环境创建和管理不同的WebDriver实例。例如,开发环境可能使用较低版本的WebDriver,而生产环境可能使用最新版本的WebDriver。

4.2 如何创建和管理多个WebDriver实例?

  • 使用Selenium Grid:Selenium Grid是一个分布式测试工具,可以自动将测试任务分配给多台计算机上的WebDriver实例,从而实现并行测试。

  • 使用多线程或多进程:我们可以在一个程序中创建多个WebDriver实例,并使用多线程或多进程来同时执行测试任务。

  • 使用容器化技术(如Docker):通过将WebDriver实例和测试代码封装在一个容器中,我们可以轻松地在不同的环境中运行测试。

4.3 WebDriver异常处理

4.3.1 WebDriver中可能出现的异常类型?

  • 元素定位失败:例如,找不到指定的元素或元素不存在。

  • 页面加载超时:当页面无法在指定时间内加载完成时,会抛出此异常。

  • 网络连接问题:例如,与服务器的连接中断或超时。

  • 其他异常:如JavaScript执行错误等。

4.3.2 如何捕获和处理WebDriver异常?

  • 使用try-except语句捕获异常:在编写测试用例时,我们可以使用try-except语句来捕获和处理WebDriver异常。

  • 自定义异常处理器(如使用Python的unittest库):我们还可以自定义异常处理器,以便更好地记录和分析异常信息。

  • 使用日志记录异常信息:通过记录异常信息,我们可以更好地了解测试过程中出现的问题,并进行相应的优化。

4.4 示例

下面是一个使用Python和Selenium库来管理多个WebDriver实例并处理异常的示例代码:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException, WebDriverException

# 创建并管理多个WebDriver实例的类
class WebDriverManager:
    def __init__(self):
        self.drivers = []

    # 创建WebDriver实例
    def create_driver(self):
        driver = webdriver.Chrome()  # 使用Chrome浏览器作为示例
        self.drivers.append(driver)

    # 处理并捕获常见的WebDriver异常
    def handle_exceptions(self):
        for driver in self.drivers:
            try:
                driver.find_element_by_id("element_id")  # 示例:尝试定位一个不存在的元素
            except NoSuchElementException:
                print("Element not found.")
            except TimeoutException:
                print("Page load timeout.")
            except WebDriverException:
                print("WebDriver exception occurred.")

    # 关闭WebDriver实例
    def close_drivers(self):
        for driver in self.drivers:
            driver.quit()

# 创建WebDriverManager实例
manager = WebDriverManager()

# 创建3个WebDriver实例
for _ in range(3):
    manager.create_driver()

# 处理并捕获异常
manager.handle_exceptions()

# 关闭WebDriver实例
manager.close_drivers()

这个示例中,我们定义了一个WebDriverManager类来创建和管理多个WebDriver实例。它包含了创建WebDriver实例、处理异常以及关闭WebDriver实例的方法。

其中,我们使用Chrome浏览器作为WebDriver实例,并尝试定位一个不存在的元素来模拟NoSuchElementException异常。在异常处理部分,我们使用了try-except语句来捕获并处理不同类型的异常。最后,我们关闭所有WebDriver实例。

这只是一个简单示例,实际应用中可能会根据具体需求进行更复杂的管理和异常处理。文章来源地址https://www.toymoban.com/news/detail-530505.html

到了这里,关于【Python爬虫开发基础⑩】selenium概述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (十四)python网络爬虫(理论+实战)——爬虫利器selenium详解

    目录 6 selenium的介绍和使用      6.1 爬虫遇到的难点

    2023年04月08日
    浏览(29)
  • 【100天精通python】Day44:python网络爬虫开发_爬虫基础(爬虫数据存储:基本文件存储,MySQL,NoSQL:MongDB,Redis 数据库存储+实战代码)

    目录 1 数据存储 1.1 爬虫存储:基本文件存储 1.2 爬虫存储:使用MySQL 数据库 1.3 爬虫 NoSQL 数据库使用 1.3.1 MongoDB 简介

    2024年02月11日
    浏览(49)
  • 〖Python网络爬虫实战㉛〗- Selenium 的其他操作使用

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2024年02月16日
    浏览(30)
  • 【Python爬虫开发基础⑤】HTML概述与基本标签详解

    专栏 :python网络爬虫从基础到实战 欢迎订阅!近期还会不断更新~ 往期推荐 : 【Python爬虫开发基础①】Python基础(变量及其命名规范) 【Python爬虫开发基础②】Python基础(正则表达式) 【Python爬虫开发基础③】Python基础(文件操作方法汇总) 【Python爬虫开发基础④】爬虫

    2024年02月09日
    浏览(52)
  • 【Python爬虫开发基础⑪】requests库概述(GET和POST请求)

    🚀 个人主页 :为梦而生~ 关注我一起学习吧! 💡 专栏 :python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~ 💡 往期推荐 : ⭐️前面比较重要的 基础内容 : 【Python爬虫开发基础⑥】计算机网络基础(Web和HTTP) 【Python爬虫开发基础⑦】urllib库的基本使用

    2024年02月12日
    浏览(30)
  • Python网络爬虫基础进阶到实战教程

    网络爬虫是指一种程序自动获取网页信息的方式,它能够自动化地获取互联网上的数据。通过使用网络爬虫,我们可以方便地获取到网络上的各种数据,例如网页链接、文本、图片、音频、视频等等。 网页是由HTML标签和内容组成,HTML标签通过标签属性可以定位到需要的内容

    2024年02月10日
    浏览(31)
  • Python3网络爬虫开发实战

    1.1 URI和URL URI:统一资源标识符(Uniform Resource Identifier) URL:统一资源定位符(Uniform Resource Locator) URN:统一资源名称(Uniform Resource Name) 1.2 HTTP和HTTPS HTTP:超文本传输协议(Hypertext Transfer Protocol) HTTPS:以安全为目标的HTTP通道(Hypertext Transfer Protocol) 1.3 请求(Requset) 1.3.1 请求方式 函数

    2024年02月04日
    浏览(33)
  • 〖Python网络爬虫实战②〗- Web网页基础

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2023年04月26日
    浏览(24)
  • 【100天精通python】Day41:python网络爬虫开发_爬虫基础入门

    目录  专栏导读  1网络爬虫概述 1.1 工作原理 1.2 应用场景 1.3 爬虫策略

    2024年02月12日
    浏览(31)
  • Python3 网络爬虫开发实战 第2版 (崔庆才) PDF 高清

    《Python 3 网络爬虫开发实战(第二版)》是由崔庆才所著的一本关于使用 Python 进行网络爬虫开发的书籍。 网络爬虫基础:介绍网络爬虫的基本概念、工作原理和常见的应用场景。 HTTP 协议与 Scrapy 框架:解释 HTTP 协议的基本知识,以及如何使用 Scrapy 框架来构建和管理爬虫项

    2024年04月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包