准备工作
简介
selenium是python的一个第三方模块,一个自动化模块,相当于模拟人对浏览器的操作.常用于爬虫和自动话测试等等.
安装selenium
selenium是一个第三方模块,我们需要自己安装,下面我们使用pip来安装
红框中的提示安装成功了.下面来检测下是否安装成功
在cmd中输入python(前提是配置好python的环境变量)
如果import selenium没有报错则说明下载成功,如果没成功则会报如下图所示的错误
不要在意包不是selenium包 哈哈
下载浏览器驱动
并不是有了selenium包之后我们就可以操作浏览器了,我们还得需要对应的浏览器驱动.我用的是chrome浏览器,需要的浏览器驱动是chromedriver.
下载chromedriver
下载地址:chromedriver下载地址 需要注意的是:浏览器的驱动版本最好和浏览器一致.
我的浏览器版本为79.0.3945.88
chromedriver下载网页如下
并没有和我浏览器对应版本的,那就下载一个贴近的就行了
配置chromedriver
其实就是让selenium找到chromedriver.有2种方法
1.把下载的chromedriver浏览器驱动放在python安装目录的根目录下
比如我的python安装目录为:D:\Python35,那么就把chromedriver放在D:\Python35目录下即可
2.在实例化selenium的时候作为参数加入,如下
#chromedriver放置的位置
chromedriver_path='C:/Users/lgx/Downloads/chromedriver_win32/chromedriver.exe'
#实例化selenium,引入chromedriver
driver=webdriver.Chrome(executable_path=chromedriver_path)
从上可知,我们可以把chromedriver放于某个地方,当使用到它的时候引用即可
这里只说引用chromedriver浏览器驱动,具体的下面会说.建议大家使用第一种方式
到此,我们的准备工作就完成了.
selenium
selenium模块的webdriver包
实际上,我们是使用selenium模块中的webdriver包来模拟人对浏览器的操作.
下面我们先来说说的webdriver的简单使用过程
- 导入selenium模块中的webdriver包
- 实例化webdriver
- 打开网页
- 定位标签元素
- 执行动作
- 获取所需要的信息
导入selenium包
from selenium import webdriver #就是用webdriver来操作浏览器驱动的
实例化webdriver
#在实例化中,我们可以加入很多参数,比如上文说的chromedriver的存在路径
#和无窗口模式等等,无窗口模式会在下文讲到
driver=webdriver.Chrome()
打开网页
url='https://www.baidu.com/'
driver.get(url) # 通过get()方法打开网页,需要传入目标网址
定位标签元素
一个HTML网页是由许许多多的标签元素组成的,我们想使用selenium点击网页上的某个按钮,就得先定位到这个按钮所在的标签元素,然后再对其进行操作.
定位标签元素的方法
一般用8种方法来定位标签方法,分别是:
1.通过元素的id来定位:find_element_by_id(id的值)
2.通过class属性来定位元素:find_element_class_name(class的值)
3.通过标签的名字来定位:find_element_by_tag_name(标签的名字)
4.通过css样式定位元素:find_element_by_css_selector(css选择器)
5.通过标签的name来定位:find_element_by_name(节点中的name的值)
6.通过文字链接来定位元素:find_element_by_link_text(文字链接)
7.通过部分文字链接来定位素:find_element_by_partial_link_text()
8.通过xpth()来定位:driver.find_element_by_xpath(x_path)
是不是很多,但是今天要讲一种超级简单好用的定位标签元素方法,那就是最后一个方法,前面7种你可以在深入之后再学习.
x_path是指标签在HTML中的位置,有绝对路径和相对路径.我们通过调用driver.find_element_by_xpath()方法,再传入x_path路径,就可以很容易定位到目标.
那么我不懂找x_path路径怎么办,别担心,强大的chrome浏览器已经帮你找出来了,你只需要复制即可.具体下文说.
执行操作
我们定位到某个标签元素之后,就可以对其进行操作了.最常见的操作有点击按钮,在输入框中输入值.
下面是这2个操作的方法:
click():点击
send_keys()
获取所需要的信息
当我们不能通过requests模块来爬取我们需要的信息的时候,就可以使用selenium来爬取.比如使用requests来爬取动态网页时候,源码里面并没有我们需要的信息,而selenium模拟人操作浏览器,可以触发js生成的内容,源码里面就有了我们需要的信息.
selenium登录人人网
下面是使用selenium登录人人网的例子,下面先分析
人人网的登录界面是这样,如果是我们登陆的话,我们需要怎么做呢,如果我们之前已经有了账号,那我们需要4步:
1,打开人人网站
2.点击账号框,然后输入账号
3.点击密码框,然后输入密码
4.点击登录按钮
下面我们使用selenium来模拟我们的这4步.
1.打开人人网网站
driver.get(url) # url就是人人网的网址
2.点击账号框,然后输入账号
我们要向点击账号框并且向里面传值,就需要定位到账号框所在的标签元素.上文我们说使用find_element_by_xpath()方法来定位是非常简单的,而且chrome浏览器也为我们找出了标签元素的的x_path值,下面就展示使用chrome找出目标标签元素的x_path值:
在人人网的登录界面右键鼠标,选中检查或者使用快捷键F12
打开之后,选中Elements,点击左边的鼠标指针,用它来选中我们的目标账号框
选中账号框之后,点击一下,就可以在Elements中定位到了账号框所在的标签元素.从下图可以看到有红框中有背景颜色这行就是账号框的标签元素
定位到目标标签元素之后,chrome怎么给我找出其的x_path的值呢?看下图,选中目标标签元素鼠标右键,选择copy,在其展开的菜单中是不是看到了2个有xpath的选择,其中Copy XPath是复制目标标签元素的相对xpath路径,而Copy full XPath是复制目标标签原色的绝对路径.这2个选中其一即可.
是不是chrome已经给我们找出来了呢?
找到了x_path的值,将其传入find_element_by_xpath()方法中即可
定位到账号框中,我们需要点击和传值,如下所示
#点击账号框
driver.find_element_by_xpath('//*[@id="email"]').click()
#在账号框输入账号
driver.find_element_by_xpath('//*[@id="email"]').send_keys('你的账号')
同理点击密码框和登录按钮也是这样操作
#点击密码框
driver.find_element_by_xpath('//*[@id="password"]').click()
#在密码框中输入密码
driver.find_element_by_xpath('//*[@id="password"]').send_keys('你的密码')
#点击登录按钮
driver.find_element_by_xpath('//*[@id="login"]').click()
其实不用点击账号框和密码框也可以直接传值的,也就是说可以省略点击的操作.
点击和传值
driver.find_element_by_xpath('//*[@id="email"]').click()
driver.find_element_by_xpath('//*[@id="email"]').send_keys('账号')
等同于
不点击,直接传值
driver.find_element_by_xpath('//*[@id="email"]').send_keys('账号')
源码
from selenium import webdriver
import time
url='http://www.renren.com/SysHome.do' #人人网的网址
chromedriver_path='C:/Users/lgx/Downloads/chromedriver_win32/chromedriver.exe' #chromedriver的保存路径
driver=webdriver.Chrome(executable_path=chromedriver_path) #实例化webdriver,并传入浏览器驱动的位置
#driver=webdriver.Chrome() #如果你已经把chromedriver驱动放在了python的安装目录下,可以把上面二行代码去掉
driver.maximize_window()
driver.get(url) #打开网页
driver.find_element_by_xpath('//*[@id="email"]').click() #点击账号框
driver.find_element_by_xpath('//*[@id="email"]').send_keys('zhanghao') #输入账号
driver.find_element_by_xpath('//*[@id="password"]').click() #点击密码框
driver.find_element_by_xpath('//*[@id="password"]').send_keys('mima') #输入密码
driver.find_element_by_xpath('//*[@id="login"]').click() #点击登录按钮
time.sleep(5)
driver.close() #关闭浏览器
有话说
当初我想学习如何使用python实现自动登陆网页来减轻工作的重复性以及解放双手,在网上找了一大堆教程,但是大多数是不完整,copy之后不是这出问题就是那出问题.因为我自己小白并且比较笨,所以看了很多的教程还是处于一脸蒙蔽的状态.我想少数和我一样想学习python的人在入门的路上走得顺一点,所以就在在会了一些浅薄的用法之后,献丑滴写出了这个教程.