技术学习:Python(21)|爬虫篇|selenium自动化操作浏览器

活动地址:CSDN21天学习挑战赛

前言

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。

1 selenium环境搭建

官方网址:https://www.selenium.dev/,可以参考官方提供信息来做相对应的操作,此处为学习知识而做的记录。

1.1 下载模块

打开终端,输入下载命令python -m pip install selenium,安装selenium以及依赖项。

Aion.Liu $ python -m pip install selenium
Collecting selenium
  WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.urllib3.connection.HTTPSConnection object at 0x103860a90>, 'Connection to files.pythonhosted.org timed out. (connect timeout=15)')': /packages/50/1a/9b92b6be1f6bbcd4e5a5b1d8e5d0c7f8224054c3bf5ea81d371be47122e8/selenium-4.4.3-py3-none-any.whl
  Downloading selenium-4.4.3-py3-none-any.whl (985 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 986.0/986.0 kB 7.7 kB/s eta 0:00:00
Requirement already satisfied: certifi>=2021.10.8 in /usr/local/lib/python3.10/site-packages (from selenium) (2022.6.15)
Collecting trio-websocket~=0.9
  Downloading trio_websocket-0.9.2-py3-none-any.whl (16 kB)
Collecting trio~=0.17
  Downloading trio-0.21.0-py3-none-any.whl (358 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 359.0/359.0 kB 6.1 kB/s eta 0:00:00
Requirement already satisfied: urllib3[socks]~=1.26 in /usr/local/lib/python3.10/site-packages (from selenium) (1.26.11)
Collecting async-generator>=1.9
  Downloading async_generator-1.10-py3-none-any.whl (18 kB)
Requirement already satisfied: idna in /usr/local/lib/python3.10/site-packages (from trio~=0.17->selenium) (3.3)
Collecting sniffio
  Downloading sniffio-1.2.0-py3-none-any.whl (10 kB)
Collecting sortedcontainers
  Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
Collecting outcome
  Downloading outcome-1.2.0-py2.py3-none-any.whl (9.7 kB)
Collecting attrs>=19.2.0
  Downloading attrs-22.1.0-py2.py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.8/58.8 kB 8.1 kB/s eta 0:00:00
Collecting wsproto>=0.14
  Downloading wsproto-1.1.0-py3-none-any.whl (24 kB)
Collecting PySocks!=1.5.7,<2.0,>=1.5.6
  Downloading PySocks-1.7.1-py3-none-any.whl (16 kB)
Collecting h11<1,>=0.9.0
  Downloading h11-0.13.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.2/58.2 kB 9.4 kB/s eta 0:00:00
Installing collected packages: sortedcontainers, sniffio, PySocks, h11, attrs, async-generator, wsproto, outcome, trio, trio-websocket, selenium
Successfully installed PySocks-1.7.1 async-generator-1.10 attrs-22.1.0 h11-0.13.0 outcome-1.2.0 selenium-4.4.3 sniffio-1.2.0 sortedcontainers-2.4.0 trio-0.21.0 trio-websocket-0.9.2 wsproto-1.1.0

关于其他语言或版本,请参考这里:https://www.selenium.dev/downloads/

1.2 安装浏览器驱动WebDriver

WebDriver 以本地方式驱动浏览器,就像用户在本地或使用 Selenium 服务器在远程机器上一样,这标志着浏览器自动化方面的飞跃。
Selenium WebDriver 指的是语言绑定和单个浏览器控制代码的实现。这通常被称为WebDriver。

Selenium WebDriver 是W3C 推荐的。

  • WebDriver 被设计为一个更简洁的编程接口。
  • WebDriver 是一个紧凑的面向对象的 API。
  • 它有效地驱动浏览器。

下面在mac中,安装谷歌浏览器WebDriver驱动。
首先按照官方的地址,下载软件,下载地址如下:

Ghrome/Chromium驱动程序下载地址:https://chromedriver.storage.googleapis.com/index.html

FireFox驱动程序下载地址:https://github.com/mozilla/geckodriver/tags

Edge驱动程序下载地址:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

IE驱动程序下载地址:https://www.selenium.dev/downloads/

Safari驱动程序下载地址:内置

Opera 驱动程序:不支持 w3c 语法,建议使用 chromedriver 与 Opera 一起工作。

查看自己机器浏览器的版本
在这里插入图片描述
在这里插入图片描述

下载WebDriver的版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下载相对应的软件程序或者相近的软件程序。

将下载好的软件程序解压,并放在python的安装目录,也就是Python_HOME/下,我机器的安装目录是:

$ pwd
/usr/local/Cellar/python@3.10/3.10.1

$ open .

在这里插入图片描述

2 使用WebDriver驱动程序

2.1 驱动管理软件

# 导入WebDriver 管理器
from webdriver_manager.chrome import ChromeDriverManager
# 获取管理器使用的位置并将其传递给服务类
service = Service(executable_path=ChromeDriverManager().install())
# 初始化驱动时使用Service实例
driver = webdriver.Chrome(service=service)

完整的示例请参考:GitHub示例

2.2 加入到环境变量

首先手工下载,然后将路径放在机器环境变量:echo 'export PATH=$PATH:[WebDriver_HOME]' >> ~/.bash_profile,其中【WebDriver_HOME】是路径地址,如下:

$ echo 'export PATH=$PATH:/usr/local/Cellar/python@3.10/3.10.1' >> ~/.bash_profile

$ source ~/.bash_profile

$ chromedriver
Starting ChromeDriver 103.0.5060.134 (8ec6fce403b3feb0869b0732eda8bd95011d333c-refs/branch-heads/5060@{#1262}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

2.3 在Python中直接引用

这里其实也是手工下载,然后在编码中直接使用。其中【WebDriver_HOME】步骤2.2中的一致。

from selenium.webdriver.chrome.service import Service
from selenium import webdriver

service = Service(executable_path="【WebDriver_HOME】")
driver = webdriver.Chrome(service=service)

2.4 打开谷歌(Chrome)浏览器

  • 界面模式(Chrome)浏览器
from selenium import webdriver

# 浏览器的初始化
browser = webdriver.Chrome()
# 发送请求
browser.get('https://www.baidu.com/')

# 打印页面的标题
print(browser.title)

# 退出模拟浏览器
browser.quit()  # 一定要退出!不退出会有残留进程

在执行browser = webdriver.Chrome()时比较慢,后续就比较快些。我使用这个打开火狐浏览器出现了错误。

  • 无界面模式(Chrome)浏览器
from selenium import webdriver
# 1. 实例化配置对象
chrome_options = webdriver.ChromeOptions()
# 2. 配置对象添加开启无界面命令
chrome_options.add_argument('--headless')
# 3. 配置对象添加禁用gpu命令
chrome_options.add_argument('--disable-gpu')
# 4. 实例化带有配置对象的browser 对象
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('https://www.baidu.com/')
# 查看请求的数据
print(browser.page_source)  # 查看渲染后的数据,就可以Xpath进行解析获取数据了
print(browser.get_cookies())  # 查看请求页面后的cookies值
print(browser.current_url)  # 查看请求url
# 关闭页面
browser.close()
# 关闭浏览器
browser.quit()

2.5 元素定位

2.6 元素操作

2.7 前进/后退

2.8 执行js脚本

2.9 页面等待

  • 页面显示等待(常用模式)

  • 页面隐式等待

3 进阶操作

3.1 使用代理IP

3.2 修改请求头

3.3 隐藏指纹特征

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
### 回答1: Python爬虫中可以使用Selenium库来爬取网页信息。Selenium可以模拟浏览器行为,能够爬取JavaScript渲染后的网页信息。使用Selenium爬取网页时,需要配合浏览器驱动(如ChromeDriver、FirefoxDriver)使用。 ### 回答2: Python是一种高级编程语言,吸引了大量编程人员和开发者使用Python进行Web开发、数据分析、机器学习和人工智能等领域的开发。爬虫技术正是其中的一项重要技术,用python编写爬虫程序通常更加便捷和灵活。而seleniumPython中主要的爬虫库之一,用于爬取动态Web页面,可以模拟用户在浏览器中的行为,从而获取大量数据。 使用selenium爬取信息可以分为以下几个步骤: 1.安装和导入selenium和webdriver: 首先需要安装适合的版本的selenium包,并导入selenium和webdriver模块: ```python from selenium import webdriver ``` 2.配置浏览器驱动: Selenium需要浏览器驱动(如Chrome,Firefox等)来与其进行交互,需要配置如下: ```python driver = webdriver.Chrome() ``` 其中,Chrome()表示使用Chrome浏览器驱动,如果使用Firefox,则需要改为Firefox()。 3.访问网页: 使用get()函数可以访问指定的网址: ```python driver.get("https://www.baidu.com/") ``` 4.查找元素: 使用selenium的查找元素功能,可以根据元素的ID、name、class、tag等属性进行查找: ```python element = driver.find_element_by_id("kw") # 根据ID查找 element = driver.find_element_by_name("wd") # 根据name查找 element = driver.find_element_by_class_name("s_ipt") # 根据class查找 element = driver.find_element_by_tag_name("input") # 根据tag查找 ``` 5.模拟用户输入/点击: 使用send_keys()函数模拟用户在搜索框中输入关键字,使用click()函数模拟用户在搜索按钮上点击: ```python element.send_keys("Python") element.click() ``` 6.解析数据: 使用webdriver的page_source属性可以获取网页的源代码,然后使用正则表达式或BeautifulSoup库等解析数据。 以上就是使用selenium进行爬虫的主要步骤。实际应用中,需要根据不同的网站和需要爬取的数据进行具体的配置和调整。在使用selenium过程中,需要了解一些常见的使用技巧和注意事项,例如模拟等待时间,处理弹窗、验证码等。同时,也需要遵循爬虫的法律和道德规范,不得进行非法、滥用等行为。 ### 回答3: selenium是一种自动化测试工具,它可以模拟浏览器行为,实现自动化操作。在Python爬虫中,selenium也可以用来爬取需要模拟人工操作的网站数据。 使用selenium可以实现以下操作: 1.自动模拟浏览器打开网页,获取网页源码。 2.模拟用户操作,如点击按钮、填写文本框、下拉选择框等。 3.通过获取网页源码进行数据解析。 基本流程比较简单,首先需要准备好selenium的环境,这需要下载对应的webdriver,这里我使用Chrome浏览器,并且下载了对应版本的chromedriver。 然后通过selenium启动浏览器,在浏览器中进行模拟操作,最后获取网页源码进行数据解析。 具体实现可以参考以下代码: ```python from selenium import webdriver from bs4 import BeautifulSoup # 创建一个Chrome浏览器实例 browser = webdriver.Chrome() # 访问目标网页 browser.get('https://www.example.com') # 模拟点击按钮,等待加载完成 button = browser.find_element_by_xpath('//button[@class="btn"]') button.click() browser.implicitly_wait(5) # 获取网页源码 html = browser.page_source soup = BeautifulSoup(html, 'html.parser') data = soup.find_all('div', class_='data') # 处理数据 for item in data: # do something # 关闭浏览器 browser.quit() ``` 总体来说,selenium是一个强大的爬虫工具,可以应对大部分需要模拟人工操作的场景,但也存在一些缺点,比如速度慢、占用资源高等。因此在具体应用中需要根据实际情况进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六月暴雪飞梨花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值