万字攻略全面了解selenium_selenium教程

本文详述了使用Python的selenium库进行Web自动化测试和爬虫的全过程,包括安装selenium和浏览器驱动、selenium基本用法如定位元素、交互操作、模拟鼠标键盘等,以及处理弹窗、窗口切换、加载等待等高级技巧。同时,介绍了如何避免selenium被网站识别的反屏蔽策略。适合有一定Python基础和浏览器自动化需求的读者。

今天带大家一起学习下python爬虫4小分队(scrapy、beautifulsoup、selenium以及pyppeteer)之一的Selenium库,主要用于模拟浏览器运行,是一个用于web应用测试的工具。Selenium直接运行在浏览器中,看起来就像人在操作一样(也可无窗口模式运行)。支持的浏览器包括IE、Firefox、Safari、Chrome、OperaEdge等。

下面主要以Chrome为例进行Selenium功能讲解,但是会附带其他浏览器的准备讲解。

0. 准备工作

Python:3.9

selenium库:4.3.0

开发工具:PyCharm 2022.1.3

本文内容会涉及python3、selenium4、javascript、html等内容,需要有一定基础,或者有很强的的接受能力。

在学习之前,比较喜欢来个清晰的目录,让大家都有个整体的认识先,下面是我整理的思维导图,有需要高清图的朋友可以私信。

后面我们就开始先安装Chrome浏览器(省略哈)并配置好ChromeDriver,当然也要安装好selenium库!还有Python环境(也是省略,有需要的看下我其他关于安装Python环境文章)。

写在前面:出现 DeprecationWarning 警告的类型错误:该类型的警告大多属于版本已经更新,所使用的方法即将弃用。所以下面代码为了让读者更快捷辨识两个版本写法,都已经整理出来,记得点个赞哦。

通过webdriver对象的find_element_by_xx(" ")(在selenium的4.0版本中此种用法即将弃用,不推荐使用),要使用通过webdriver模块中的By,以指定方式定位元素。

1. 安装selenium库

pip install selenium

2. 安装浏览器驱动 

安装驱动,咱们可以分为两种方式去做,一种是手动下载驱动到本地,由项目直接调用,第二种就是通过第三方库来自动安装,下面我们都详细介绍两种方式具体操作。

这里省略掉chrome或者其他浏览器的安装过程,默认大家都已经安装好心仪浏览器了~~~

2.1 手动安装驱动

第一步:查看浏览器版本号

打开浏览器-说明-关于Google Chrome,就可以看到我们的版本号了。

 第二步:根据版本号选择合适的浏览器驱动

ChromeDriver地址:https://registry.npmmirror.com/binary.html?path=chromedriver/

ChromeDrive国内源:https://mirrors.huaweicloud.com/chromedriver/

最新chrome版本驱动地址:Chrome for Testing availability

 

因为作者是windows的所以就选了win版,只有32位是能够兼容64位使用的,所以不用担心有什么问题。

第三步:下载驱动到本地

将下载好的Driver文件放到项目目录下,方便在使用的时候填写路径(如果不写绝对路径,就要将driver文件移到python的script目录下)

path = r'D:\software\PyCharmLib\chromedriver.exe' # 驱动文件存放的位置

# 如果存在DeprecationWarning警告,就需要使用新版本写法

path = Service(r'D:\software\PyCharmLib\chromedriver.exe')

 具体用法下面再详细说明。

第四步:其他浏览器的Driver地址 

(IE浏览器)IEDriverServer地址:iedriverserver

(火狐浏览器)GeckoDriver地址:geckodriver

(safari浏览器)SafariDriver地址:驱动已存在本地,路径:/usr/bin/safaridriver

(opera浏览器)OperaDriver地址:operadriver

(edge浏览器)EdgeDriver地址:edgedriver

2.2 自动安装驱动

要想实现自动安装浏览器驱动,我们就需要用到第三方库 webdriver_manager ,直接下载该库使用即可。

pip install webdrivermanager

如果是pycharm编辑器直接在项目里面添加:

 添加完,简单调用一下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

# 新版本写法
browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 旧版写法
# browser = webdriver.Chrome(ChromeDriverManager().install())

browser.get('http://www.baidu.com/')
# 新版写法
search = browser.find_element(By.ID, 'kw')
# 旧版写法
# search = browser.find_element_by_id('kw')
search.send_keys('python')
search.send_keys(Keys.ENTER)

# 关闭浏览器
browser.close()

 上面代码就是简单触发了一下浏览器,主要是由ChromeDriverManager().install() 方法自动安装默认浏览器的适配驱动,首先它会获取当前浏览器版本号,再去下载相关驱动。

注意:使用自动下载亲测每次启动都很慢,因为每次都会重新识别、调用,所以各位朋友慎用。

上面所有内容就是我们初步需要准备的基础。

3. selenium基本用法

下面开始讲初始化浏览器对象、访问页面、设置浏览器大小、刷新页面和前进后退等基础操作。

3.1 初始化浏览器对象

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

# 新版本写法
browser = webdriver.Chrome(service=
    Service(r'D:\software\PyCharmLib\chromedriver.exe'))
# 旧版写法
# browser = webdriver.Chrome(r'D:\software\PyCharmLib\chromedriver.exe')

browser.get('http://www.baidu.com/')
# 新版写法
search = browser.find_element(By.ID, 'kw')
# 旧版写法
# search = browser.find_element_by_id('kw')
search.send_keys('python')
search.send_keys(Keys.ENTER)

# 关闭浏览器
browser.close()

 通过上面代码会打开我们的浏览器界面后并关闭:

一般采用最简单的浏览器初始化都是带有界面的,但是我们还是设置成 无界面浏览器

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

# 设置无界面浏览器
option = webdriver.ChromeOptions()  # 创建一个配置对象
option.add_argument("--headless")  # 开启无界面模式
option.add_argument("--disable-gpu")  # 禁用gpu

# options.set_headles() # 无界面模式的另外一种开启方式
 # 实例化带有配置的driver对象
browser = webdriver.Chrome(service=
    Service(r'D:\software\PyCharmLib\chromedriver.exe'), options=option) 

browser.get('http://www.baidu.com/')
# 新版写法
search = browser.find_element(By.ID, 'kw')
search.send_keys('python')
search.send_keys(Keys.ENTER)

# 关闭浏览器
browser.close()

 通过提前把参数准备好,在初始化的时候设置进去,这样子浏览器就不会打开任何界面。

3.2 访问页面

进行页面访问使用的是 get( url ) 方法,url就是待访问页面的URL地址参数。

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

# 实例化带有配置的driver对象
browser = webdriver.Chrome(
    service=Service(r'D:\software\PyCharmLib\chromedriver.exe'))

# 访问页面
browser.get('http://www.baidu.com/')

# 关闭浏览器
browser.close()

3.3 设置浏览器大小

通过 set_window_size()方法就可以设置浏览器大小

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

# 实例化带有配置的driver对象
browser = webdriver.Chrome(
    service=Service(r'D:\software\PyCharmLib\chromedriver.exe'))

# 访问页面
browser.get('http://www.baidu.com/')

# 设置浏览器大小为500*500像素
browser.set_window_size(500, 500)

# 关闭浏览器
# browser.close()

还可以通过 maximize_window() 方法设置浏览器全屏

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

# 实例化带有配置的driver对象
browser = webdriver.Chrome(
    service=Service(r'D:\software\PyCharmLib\chromedriver.exe'))

# 访问页面
browser.get('http://www.baidu.com/')

# 设置浏览器全屏
browser.maximize_window()

# 关闭浏览器
# browser.close()

3.4 刷新页面

refresh()方法可以用来进行浏览器页面刷新,等同于我们平时用的F5按键,有些页面需要定时刷新,这也算是比较常用方法。

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

# 实例化带有配置的drive
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值