python爬虫工程师 成长之路八 Selenium WebDriver


Selenium WebDriver 简介


  • Selenium WebDriver是一个本地和远程的实时浏览器自动化工具,是最接近的模拟用户行为。

  • WebDriver的目标是提供一个良好设计的面向对象的API,提供了对于现代先进web应用程序测试问题的改进支持。

  • Selenium-Webdriver更好的支持页面本身不重新加载而页面的元素改变的动态网页。


Selenium WebDriver 原理


  • WebDriver是按照C/S(Client/Server) 的模式设计的。

  • WebDriver 启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为web driver的remote server。

  • Client 端根据我们的需求以http请求形式发送给Server,并在执行各种操作后将返回值等信息返回。

  • Server端,也就是Remote server 需要依赖原生的浏览器组件(如:chromedriver.exe)来等待 Client 发送请求并做出响应。


Selenium WebDriver 安装


安装selenium库,在命令行中输入

pip install selenium

出现如下字样,则安装成功

扫描二维码关注公众号,回复: 10272064 查看本文章
Successfully installed selenium

下载与浏览器版本相匹配的webdriver

chromedriver.exe

http://chromedriver.storage.googleapis.com/index.html

下载后将chromedriver.exe放到python安装目录下的Scripts目录

在这里插入图片描述


Selenium WebDriver 使用


浏览器常用操作


启动浏览器

不同的浏览器,方式略微不同

from selenium import webdriver
#谷歌浏览器
dr = webdriver.Chrome()
#火狐浏览器
dr = webdriver.Firefox()

打开网页

执行该代码之后,自动打开你输入的网址

dr.get('http://www.baidu.com')

在这里插入图片描述


关闭浏览器

在工作结束后常常需要关闭浏览器,关闭浏览器的方式有两种:

  • close():关闭当前的浏览器窗口
  • quit():不仅会关闭浏览器窗口,还会彻底的退出webdriver,释放与driver server之间的连接,释放所有的资源
from selenium import webdriver
#谷歌浏览器
dr = webdriver.Chrome()
#打开网页
dr.get('http://www.baidu.com')
#退出浏览器
dr.quit()
#dr.close()

最大化浏览器

from selenium import webdriver
import time
#谷歌浏览器
dr = webdriver.Chrome()
#打开网页
dr.get('http://www.baidu.com')
#最大化浏览器
dr.maximize_window()
#便于观察
time.sleep(3)
#退出浏览器
dr.quit()
#dr.close()

在这里插入图片描述


自定义浏览器大小

from selenium import webdriver
import time
#谷歌浏览器
dr = webdriver.Chrome()
#打开网页
dr.get('http://www.baidu.com')

dr.set_window_size(240, 320)

#便于观察
time.sleep(3)
#退出浏览器
dr.quit()
#dr.close()

在这里插入图片描述


打印当前页面的信息

打印当前页面的title、url以及页面源码(源码过多就不进行展示了)

from selenium import webdriver
import time
#谷歌浏览器
dr = webdriver.Chrome()
#打开网页
dr.get('http://www.baidu.com')

print('current_url:',dr.current_url)
print('source:',dr.page_source)
print('title:',dr.title)

#便于观察
time.sleep(3)
#退出浏览器
dr.quit()
#dr.close()

在这里插入图片描述


实现浏览器前进和后退

后退会返回到当前网页的上一个网页,前进也会返回到当前网页的上一个网页

from selenium import webdriver
import time
import os

dr = webdriver.Chrome()

first_url = 'http://www.baidu.com'
dr.get(first_url)
print('current_url',dr.current_url)
time.sleep(1)

second_url = 'http://www.news.baidu.com'
dr.get(second_url)
print('current_url',dr.current_url)
time.sleep(1)

dr.back()
print("backing to %s"%(first_url))

time.sleep(1)
dr.forward()
print("forward to %s"%(second_url))
time.sleep(1)
dr.quit()

在这里插入图片描述


单对象定位


  • find_element(),用于单对象定位。
  • 对象的定位和操作是webdriver的核心内容,其中操作是建立在定位的基础之上,因此对象定位的地位就越发显得重要了

演示文档

打开百度首页→鼠标右键点击→查看网页源码
在这里插入图片描述
webdriver提供了一系列的对象定位方法,常用的有:

by_id

通过id定位需要用id的值定位

#通过id定位
print(dr.find_element_by_id('head').text)

在这里插入图片描述


by_name

通过name定位需要用name的值定位

#通过name定位
dr.find_element_by_name('mp')

by_class_name

通过class name定位需要用class name的值定位

#通过name定位
dr.find_element_by_name('mp')

by_tag_name

通过tag name定位需要用标签的值(如,<a>的值为a)定位

#通过tag name定位
print(dr.find_element_by_tag_name('div').text)

在这里插入图片描述


by_link_text

通过链接的文字描述来定位

如匹配下面图片中的新闻链接

dr.find_element_by_link_text("新闻")

在这里插入图片描述


by_css_selector

不懂css selector的可以点击了解或只用上面的方式CSS介绍

#获取标签名为div的标签
dr.find_element_by_css_selector('div')

by_xpath

不懂xpath的可以点击了解或用其他的方式xpath lxml库

dr.find_element_by_xpath('/html/body/form/div/label')

获取属性

获取div标签的id属性

dr.find_element_by_tag_name('div').get_attribute('id')

获取div标签的文本内容

print(dr.find_element_by_tag_name('div').text)

在这里插入图片描述


一组对象定位


find_elements(),常用于定位一组对象或批量操作对象,用法与前面的单对象定位(find_element())一致(不清楚的往前面翻就行)。


模拟用户操作


element.click()

模拟用户点击对象element

#
dr.find_element_by_link_text("新闻").click()

element.send_keys

模拟用户向名为p的文本框输入python

dr.find_element_by_name('q').send_keys('python')

element.clear()

模拟用户清除输入的内容

dr.find_element_by_name('q').clear()

模拟键盘输入

模拟用户在键盘上输入

from selenium.webdriver.common.keys import Keys

#模拟control+a
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'a'))
#模拟control+c
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'c'))
#模拟control+x
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'v'))
发布了85 篇原创文章 · 获赞 158 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Late_whale/article/details/104818601