Python之Selenium的基本使用(1)
Selenium(1)
文章目录
- Selenium(1)
- 安装类库
- 安装驱动
- 开始
- 八个基本组成部分
- 打开与关闭浏览器
- 浏览器操作:获取网页以及浏览器的信息
- 等待策略
- 元素操作
- 1.查找元素
- 2.获取元素信息
- 3. 操作元素(元素交互)
- 基本介绍结束
- 参考资料
安装类库
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
安装驱动
首先需要下载ChromeDriver。
可以前往以下两个网站的任意一个。
http://chromedriver.storage.googleapis.com/index.html
CNPM Binaries Mirror
注意,需要下载与自己当前Chrome浏览器版本相匹配的驱动器。
- 如何查看自己Chrome浏览器的版本?
在Chrome的菜单中,选中
帮助
菜单项,然后点击其下的子菜单项关于Google Chrome
。
我的版本是
103.0.5060
,下载对应的驱动器就行。
- 将下载的驱动器放入指定路径中。
下载下来的文件夹中有一个可执行文件,就是驱动器。现在需要将驱动器放入指定的路径中。
- 放入运行python的安装目录下(或者说,将驱动器放在当前使用的python解释器的同一级目录下):
- 如何找到当前运行的python环境的安装目录?打开cmd,输入python,进入python交互界面
import sys print(sys.executable)
到此,完成了所有的准备工作,当然,完成这些的前提是你已经下载好了python。
开始
好了,现在正式开始学习使用Selenium
吧。
首先,简单了解一下什么是Selenium
以及它能干些啥。
以下是官方对它的介绍
:Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。
它提供了扩展来模拟用户与浏览器的交互,用于扩展浏览器分配的分发服务器, 以及用于实现 W3C WebDriver 规范 的基础结构, 该 规范 允许您为所有主要 Web 浏览器编写可互换的代码。
八个基本组成部分
根据官方文档的介绍,所有在Selenium中的操作,基本可以归结为一下八个部分。
使用驱动实例开启会话:在我目前看来,就是使用代码打开浏览器。
driver = webdriver.Chrome() #打开Google浏览器
在浏览器上执行操作:最常用的操作就是导航到一个网页。
driver.get('https://www.baidu.com/')
请求浏览器信息:既然打开了浏览器,当然可以获取浏览器的信息喽,较常用的就是获取浏览器的
Cookie
。cookies = driver.get_cookies())
。也可以获取其他信息,如窗口句柄、浏览器尺寸/位置、警报等。建立等待策略:这个很重要。当我们使用driver.get()方法导航到一个网页时,get方法会在网页的框架加载结束后返回。但很多网页都会需要发送Ajax请求,经过JavaScript渲染,最后才呈现完整的页面,完成这些操作需要时间。而我们如果想要获取页面完整信息,就需要等待。Selenium能够实现所见即所爬,页面没加载完毕,我们看到的也不是完整的页面,那么怎么能爬取到完整的HTML源码呢?
发送命令查找元素:这个没什么好说的,就是要定位到网页的某个元素嘛。
操作元素:对于一个元素,只有少数几个操作,但是时常会用到它们。
获取元素信息:信息提取。
结束会话:
driver.quit()
这将结束驱动程序进程, 默认情况下, 该进程也会关闭浏览器. 无法向此驱动程序实例发送更多命令.还有一个driver.close(),用于关闭窗口,需要区分开来,一般如果想结束程序的运行,并关闭浏览器,就使用quit()
.
看着有八大基本操作,实际上也没那么多。可以再简化一下:
以上基本操作中1,8
归为一类,就叫必要操作
吧,因为使用Selenium,打开浏览器和关闭浏览器是必要的。2,3,
归为一类,叫做浏览器操作吧,因为针对的对象是浏览器,至于4
可以单独归为一类,命名为等待策略
,5,6,7
再归为一类,称作元素操作。
打开与关闭浏览器
这个没太多说的,最简单的打开和关闭方式。
from selenium import webdriver
driver = webdriver.Chrome() #打开浏览器
driver.quit() #关闭浏览器
有点像对文件的操作,打开了,使用完后,就要关闭,否则会占用资源。
- 无头模式:
显然,每次webdriver.Chrome()
都会打开浏览器,而且如果程序切换页面频繁,对我们的其他操作会造成干扰。
无头模式运行时不会弹出窗口,从而减小干扰,同时还减少了一些资源的加载(比如图片),这在一定程度上节省了资源加载的时间和网络带宽。
from selenium import webdriver
from selenium.webdriver import ChromeOptions
import timeoption = ChromeOptions()
option.add_argument('--headless') #添加了一个初始化参数
browser = webdriver.Chrome(options=option)
browser.set_window_size(1366, 768) #设置浏览器的窗口大小,虽然不会显示出来
browser.get('https://www.baidu.com')
time.sleep(5) #睡眠5秒
browser.quit()
浏览器操作:获取网页以及浏览器的信息
- 获取网页:
webDriver.get('url')
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com') #打开百度网页
- 获取浏览器信息:我们获得了浏览器对象的引用,并把它保存在
driver
变量中
driver.title #从浏览器中读取当前页面的标题
# 我们打开一个网页,都有一个对应的标签(选项卡),标签上的文字即为title
driver.current_url #获取当前页面的url
还有一种比较常用的操作,添加和删除Cookies
#添加Cookie
driver.add_cookie({"name": "key", "value": "value"})#获取Cookie
# 1.获取指定Cookie
# 可以指定cookie名称,然后获取其值
driver.get_cookie("cookie's name")# 2. 获取全部Cookies
driver.get_cookies()#删除Cookie
# 1.删除指定cookie
driver.delete_cookie("cookie's name")
# 2.删除所有Cookies
driver.delete_all_cookies()
等待策略
等待策略共有三种:显式等待,隐式等待, 流畅等待 。其中最常用的是显示等待。
- 显示等待
我们可以在页面加载之前,指定一个条件,在页面加载过程中,如果满足这个条件,程序继续执行,若不满足,则继续等待直到条件满足。当然,如果条件始终不能满足,也不能让程序无休止地不停等待,所以也可以设置一个等待时间,如果在等待时限之类,条件满足,那么就会进行下一步,否则,抛出异常。
这里需要使用到wait包。
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 ECbrowser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser, 10) #初始化一个WebDriverWait对象
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(input, button)
上面代码中,实现显示等待的代码为wait.until()
。wait对象初始化时,指定了浏览器和最长等待时间。随后使用wait.until(condition)
的形式,完成显示等待。这里需要解释的是:condition就是我们指定的条件,这个条件本质是一个函数。只要该函数的返回值在当前语言中,能够被解释成True,那么条件满足,程序继续运行。
我们将 条件 作为函数引用传递, 等待 将会重复运行直到其返回值为true。“truthful”返回值是在当前语言中计算为boolean true的任何值,例如字符串、数字、boolean、对象(包括 WebElement )或填充(非空)的序列或列表。这意味着 空列表 的计算结果为false。当条件为true且阻塞等待终止时,条件的返回值将成为等待的返回值。
库中实现定义好的条件很多。可以在IDE中查看selenium.webdriver.support.expected_conditions
包中的函数。
当然,我们也可以自定义条件函数,这个函数需要有一个返回值。
- 隐式等待
指定一个固定的等待时长,时间一到,运行程序下一步。
driver.implicitly_wait(10) #隐式等待10秒
- 流畅等待:流畅等待实例定义了等待条件的最大时间量,以及检查条件的频率。
用起来有点麻烦,我是不会用的。
driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
wait = WebDriverWait(driver, timeout=10, poll_frequency=1, ignored_exceptions=[ElementNotVisibleException, ElementNotSelectableException])
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//div")))
元素操作
1.查找元素
首先说明,我们查找到的元素,在Selenium中,都是WebElement
类的对象。
查找元素主要是两个方法。find_element
,find_elements
。顾名思义,前者只找一个元素,后者找所有匹配的元素。两个方法使用基本一致,只介绍一个。
find_element(by=By.ID, value=None)
:by参数是指查找方式,默认按节点ID查找,value代表查找值,默认为空。
这里的查找方式,可以参看selenium.webdriver.common.by
包的定义。
from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser.get('https://taobao.com')
input = browser.find_element(By.ID, 'q') #按照ID查找节点
input = browser.find_element(By.CSS_SELECTOR, '#q') #按CSS选择器
input = browser.find_element(By.XPATH, '//*[@id="q"]') #按XPath路径语言
find_elements()
:查找到的结果以列表形式返回。
2.获取元素信息
WebElement.tag_name #获取元素标签名
WebElement.rect #用于获取参考元素的尺寸和坐标.
WebElement.text #获取特定元素渲染后的文本.
WebElement.location #获取元素的位置
WebElement.size #获取元素的大小
WebElement.is_displayes() #判断元素是否正确显示
#等等还有许多方法和属性
3. 操作元素(元素交互)
仅有五种基本命令可用于元素的操作:
- 点击 (适用于任何元素)
- 发送键位 (仅适用于文本字段和内容可编辑元素)
- 清除 (仅适用于文本字段和内容可编辑元素)
- 提交 (仅适用于表单元素)
- 选择 (参见 选择列表元素)
以上方法使用那些元素对象需要弄清楚。
只介绍常用的:
- 点击
WebElement.click()
# 元素点击命令执行在元素的中央。
# 如果元素中央被遮挡,将会返回元素点击错误
- 发送键位
WebElement.send_keys()#示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import KeysWebElement.send_keys("info") #向元素发送"info"字符串
WebElement.send_keys(Keys.ENTER) #向元素发送回车按键命令
WebElement.send_keys("info"+Keys.ENTER) #输入"info"后,按下回车
#更多的按键,查看keys包
- 清除
#一般用于表单输入的清除
WebElement.clear()
- 提交:在Selenium 4中, 不再通过单独的端点以及脚本执行的方法来实现. 因此, 建议不要使用此方法, 而是单击相应的表单提交按钮.
基本介绍结束
到此,最最基本的操作已经介绍了。更多的操作以后更新吧。
参考资料
如何查看python的安装目录
Python—查看安装路径 - Bestone - 博客园 (cnblogs.com)
Find full path of the Python interpreter? - Stack Overflow
概述 | Selenium
Python之Selenium的基本使用(1)相关推荐
- python selenium脚本_怎样开始写第一个基于python的selenium脚本
1.下载并安装python(http://www.python.org/geti/). 2.安装selenium(http://pypi.python.org/pypi/selenium)下载并解压缩 ...
- 使用Python在Selenium WebDriver中获取WebElement的HTML源代码
我正在使用Python绑定来运行Selenium WebDriver. from selenium import webdriver wd = webdriver.Firefox() 我知道我可以抓住 ...
- python批量下载文件-python使用selenium实现批量文件下载
背景 实现需求:批量下载联想某型号的全部驱动程序. 一般在做网络爬虫的时候,都是保存网页信息为主,或者下载单个文件.当涉及到多文件批量下载的时候,由于下载所需时间不定,下载的文件名不定,所以有一定的困 ...
- Python之selenium:selenium库的简介、安装、使用方法之详细攻略
Python之selenium:selenium库的简介.安装.使用方法之详细攻略 目录 selenium库的简介 1.Selenium需要一个驱动程序来与所选的浏览器交互 selenium库的安装 ...
- [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒
前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...
- [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...
- Python学习--Selenium模块
1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台 转载于:https://www.cnblo ...
- python selenium_Python+selenium自动化测试
前言 Selenium v1.0 的核心组件是 Selenium RC:Selenium v2.0 的核心组件是 WebDriver:因此可以说 v1.0 版本和 v2.0 版本完全是两套东西.而 S ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
最新文章
- Go语言Beego框架1.6.2(稍显老)及bee工具的使用
- 动态规划之-最大子段和
- Win2003的IIS设置
- HDU1229 还是A+B【水题】
- ios获取区域服务器信息,ios获取服务器数据
- android对象识别实验报告,20162302 实验四《Android程序设计》实验报告
- iphone流量 信息服务器,iphone几个功能必须关闭,别再让流量不够用
- jQuery EasyUI/TopJUI上传多个附件并可以进行删除操作
- Android基础Activity篇——创建一个活动(Activity)
- [宋史学习] 取蜀将帅不利
- 【3D建模制作技巧分享】Zbrush中凹凸贴图、法线贴图和置换贴图的区别
- 微信从原版到现在所有界面图片_微信进入界面的图片有什么含义
- 团队任务3每日立会(2018-10-24)
- 阿诺德·施瓦辛格的演讲(拼命才会优秀,自律才会自由~)
- SSD《一》-- 基础知识
- SpringBean篇 (2) 注解配置形式
- Java8 Stream:20+实际例子,玩转集合的筛选、归约、分组、聚合
- 人工智能很危险!?开发需谨慎?
- 德信计算机怎么开音乐,计算机模式识德信别 文献阅读.ppt
- 高级信息系统项目管理师十大领域