开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践: Selenium 1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15408
Selenium 1
内容介绍:
一、Selenium 库详解
二、Selenium 安装
三、selenium 用法讲解
四、声明浏览器对象
五、访问页面
六、查找元素
一、Selenium 库详解
1.概念
那么首先看一下什么是Selenium库。那么这个Selenium库它主要是一个用来做自动化测试的一个工具,那么它是支持多种浏览器的,比如说它支持safari,chrome,然后firefox ,PhantomJS, Safarl还有一些安卓浏览器之类的等等都支持。
2. Selenium驱动浏览器
那么它主要是用来驱动这个浏览器,然后给它发一些指令,让这个浏览器,来做各种动作的,那么这动作,可能会有一些跳转,输入,点击,然后下拉,等等之类的这些操作,那么都可以用这个Selenium然后来驱动它来完成。
3. Selenium解决javaScript的渲染问题
那么在爬虫中,因为已经有了浏览器,也有了这个Selenium驱动工具,那么这样的话,就可以完全的模拟这个网页加载,所以说在做爬虫的时候如果遇到这个requests库或者是re.lub这些库,然后无法正常的获取这个网页内容的话,也就是说这个网页它可能是后来的这个javaScript的渲染的,那么用Selenium就可以完成这个渲染。
实际上就是模拟了这个浏览器的完整的操作,那么在这里获取的这个源代码,就是这个网页渲染完之后的这个源代码,所以这样可以完全的解决javaScript的渲染的问题。
二、Selenium 安装
接下来,就看一下这个Selenium怎样安装的,那么之前也演示过了Selenium,还有它的相关的一些浏览信息动,然后就是说这个chrome,PhantomJS等等的之类的怎样来安装的。如果还没有安装的话,可以看一下前面的一些介绍,那么在这里就简单的提一下,然后它的安装,就是也是用pip3 install selenium,然后传入这个,然后传入这个selenium这个变量。Three pip3 selenium。然后就完成了这个selenium安装。
三、selenium 用法讲解
那么接下来就讲解一下selenium这个库的基本用法。比如说怎样来打开一个浏览器,怎样来查找一个元素,怎样网易点击,怎样在浏览器,文本框中输入一些文字之类的。
1. 基本使用
接下来就打开一个notebook文件,那么接下来首先介绍一下这个selenium的一些基本使用。那么首先选一个算是比较全面的一个实例,然后来看一下这个selenium相关的一些功能。
(1)、浏览对象
比如说在这里就是首先声明了一个浏览器对象,在这里就from selenium import webdriver
// webdriver实际上就是这么一个浏览信息的对象。
browser = webdriver.chrome()
//在这里就可以用点,然后加一个浏览器的名称,然后就可以声明这个浏览器驱动对象,然后把它复制为一个browser, browser是浏览器的意思。
(2)、访问网址
browser.get(‘
https://www.baidu.com
’)
//然后在这里就可以直接调用. get,然后传入这一个url,比如说在这里就传入这个百度这个网址,然后接下来它就会跳出一个浏览器,然后访问百度这个网址。
(3)、访问id
input = browser.find_element_by_id(‘kw’)
//然后后面就用了这个find_element_by_id,然后把它的这个相关的信息,就是说通过这个ID找出来了,里面的这个ID为kw的元素,然后把它复制一个imput。
input.send_keys(‘Python’)
input.send_keys(Kets.ENTER)
//然后再调用这个send_keys,send_keys就是向这个元素里面发送一些键,那就是说敲入这个python,然后接下来再send_keys敲入回车。
(4)、调用等待
wait = WebDriverWait(browser,10)
wait.until(EC.presence_of_element_located((By,’content_left’)))
//然后接下来再调用一下等待,等待某个元素被加载出来,比如说这等待id为content_left的一个元素的加载出来。
(5)、打印
print(browser,current_url)
print(browser,get_cookies())
print(browser,page_source)
然后加载出来之后,再打印出当前的url,然后再把cookies打印出来,再把这个源代码打印出来。
(6)、最终代码
from selenium import webdriver
from selenium. Webdriver.common.by import By
from selenium. Webdriver.common.keys import Keys
from selenium. Webdriver.support import expected_conditions as EC
from selenium. Webdriver.support.wait import WebDriverWait
browser = webdriver.chrome()
try:
browser.get(‘
https://www.baidu.com
’)
input = browser.find_element_by_id(‘kw’)
input.send_keys(‘Python’)
input.send_keys(Kets.ENTER) wait = WebDriverWait(browser,10)
wait.until(EC.presence_of_element_located((By,’content_left’)))
print(browser,current_url)
print(browser,get_cookies())
print(browser,page_source)
finally:
browser.close()
然后外面try,finally把包围一下,最后,把这个浏览器关掉,那么可以看一下这个网页的运行结果,那么先把编码进行最小化,运行一下。
2.运行结果
可以看到下面会弹出一个浏览器,然后马上可以消失了,因为说明它已经执行完了这个串finally,这也是它最后执行了这个close。
(1)、百度链接
那么看一下这个输出结果,那么可以看到下图有一个输出结果current_url,current_url实际上就是百度搜索的一个链接,这个就是平常在做百度搜百度的时候,比如说输入一个python,然后当前的这url变成这样的一种形式,
(2)、爬取的源代码
然后接下来打印输出了这个cookies,这cookies它就会用一个列表的形式给打印输出来,然后再把这page_source,page_source就是网页的源代码,然后下图就是网页爬取的代源代码,
(3)、提取百度结果
然后这个,就是可以用它来提取一些相关的些信息,那么比如说在这里就是这就是一些python的一些搜索的结果,那么可以对这个源代码进行解析,然后就可以提取出百度的一些搜索结果,
那么这个就是selenium然后驱动chrome完成的一些操作,那么可以为它完成输入文字,然后敲回车,然后等待加载,然后再获取源代码,这么一个过程,这就是它的一些基本的使用方法。
四、声明浏览器对象
那么接下来咱们就详细的一个一个来介绍一下这个selenium的一些基本的用法。那么,首先介绍一下怎样来声明浏览器对象。
from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safarl()
那么声明一个浏览器对象首先要引入这个 webdriver这个包,那么在这里,就直接用browser = webdriver.Chrome(),然后它就会给生成一个Chrome这么一个浏览器对象,然后就可以用它来进行各种浏览器系列操作,然后还可以在这里支持Firefox,Edge,PhantomJS,Safarl之类的,然后可能还支持一些特殊的浏览器,可以查看一下官方文档,这个支持的相关的浏览器还是比较多的。那么在这里就不再进行运行了,因为有的浏览器我这里没有安装,所以它在运行过程中会出现一些错误之类的。那么后面的话,主要是用这个Chrome来进行演示,因为它会直接弹出一个Chrome浏览器,然后可以比较直观的看一下这个运行结果。
五、访问页面
那么接下来就用这个Chrome来做一些演示,比如说打开这个淘宝页面,然后再把page_source打印出来,然后再把浏览器关闭。
from selenium import webdriver
browser = webdriver.Chrome()
browser.get(‘https://www.taobao.com’)
print(browser,page_source)
browser.close()
那么在这里运行一下。可以看到下面它就弹出来一个Chrome浏览器,然后突然的它出现了一个淘宝这样一个页面,然后立马把Chrome浏览器关掉,
然后下面它就会把淘宝的这个源代码然后打印展示出来,然后就可以用它来进行和一些相关信息的提取了,比如说下图就是一些相关的导航之类的。然后再下面,它可能会有一些商品的一些首页的信息。
六、查找元素
然后接下来再看一下怎样来查找一个元素,现在已经把一个网页展开了,然后可能需要对这个网页进行一些交互的操作,比如说可能会找到一个输入框,然后输入一些信息,找到一个按钮,然后让它来点击,然后这样的。
1.单个元素
然后接下来就看一下怎样来获取一个元素,比如在这里就直接首先访问淘宝,然后接下来就用一下这个find_element_by_id,也就是说用然后来寻找一个元素,然后这个ID的名称就是q,然后在这里还有一个方法,比如说find_element_by_css_selector (‘#q’),也就是说可以用css选择器去选择一个元素,也可以用x path这种选择器,然后来选择一个元素。那么在这里实际上它之前的选择是完全相同的by_id(‘q’)和by_css_selector (‘#q’)实际上做同样的事情,然后by_ xpath (‘//*[@id=”q”]’)实际上这三个应该是完全一样的,在这里把它分别命名为三个input,然后把它打印出来。
from selenium import webdriver
browser = webdriver.Chrome()
browser.get(‘https://www.taobao.com’)
input_first = browser.find_element_by_id(‘q’)
input_second= browser.find_element_by_css_selector (‘#q’)
input_third = browser.find_element_by_ xpath (‘//*[@id=”q”]’)
print(input_ first, input_ second, input_ third,)
browser.close()
然后再把这个浏览器关掉,然后看一下这个结果。可以看到这个浏览器它又弹出来,然后它就关闭了,那么可以看到这个运行结果,它是一个webelement类型,然后它是有一个代号的,那么可以看到这个webelement等于0.564956等等之类的,可以看到这三个元素,实际上这个代号是完全相同的,也就是说的是完全相同的一个元素,那么这三个是完全等价的。
2. 单个元素查找方式
那么也就是说,通过这几个方法,它可以找到同样的元素,也就是说说找元素,可以用一些不同的方法找到同样的元素,那么在下面,就列出了一些常用的一些方法,
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
ind_element_by_name就是说通过name来查找,然后通过x path来查找,通过link_text来查找,通过一些标签名,一个class,通过一个CSs选择器等等之类的都可以用来查找。那么传入的参数就根据它的一些不同的查找方式而不同。
3. 单个元素通用查找方式
然后还有一种查找方式,就是一个通用的查找方式,
那么可以直接调用find_element,然后它的第一个参数,就是用一个By,然后后面传一个她的类型。然后第二个参数就是把刚才的传的参数传过来,也就是说它这个方法实际上就是。这种上面这些方法的普遍的一个方法,算是一个通用的一个方法,可以直接的把这个by直接当做一个参数传过来,然后就可以进行选择了,那么也就是说,上面这些方法相当于find_element的一些特殊的事件,那么这个方法实际上也是完全一样的,也可以运行一下这个代码。
from selenium import webdriver
from selenium. Webdriver.common.by import By
browser = webdriver.Chrome()
browser.get(‘https://www.taobao.com’)
input_first = browser.find_element_(By,ID,‘q’)
print(input_ firs)
browser.close()
可以来看一下。这里的浏览器也是出现然后就关闭了,然后可以看到这里,它也是正常的输出了一个网页的元素。