【爬虫】5.2 Selenium编写爬虫程序

1. Selenium  框架介绍 

  • Selenium自动化测试框架是实现自动化测试的一个软件结构功能组件集合
  • Selenium自动化测试框架是一个半成品,能够帮助用户实现自动化测试。
  • Selenium是模仿浏览器行为的,当你运行测试类(爬虫)的时候,你就会发现selenium会打开一个浏览器,然后执行你的操作。

Selenium 的两种版本

  • Selenium 1(Selenium RC,Remote Control):传统 Selenium 框架,支持多种编程语言脚本生成。但需要启动一个代理 Server 来处理用户与测试 Server 之间的通讯。
  • Selenium 2(Selenium Webdriver):全新自动化接口,突破了 Selenium 1 的一些限制,剔除了中间 Server,适合熟悉 Selenium API 的 case 测试人员使用。

Selenium RC 工作原理图

        Selenium 引入了 Remote Control Server 这样一个代理 Server,JavaScript 脚本注入和与 Server 通讯都通过这个代理 Server 来进行。流程说明:

  1. 执行测试脚本,脚本向Selenium Server发起请求,要求和Selenium Server建立链接
  2. Selenium Server的Launcher启动浏览器,向浏览器中插入Selenium Core的JavaScript代码库,并把浏览器的代理设置为Selenium Server的Http Proxy,确保后续Core的脚本域被访问的网站的脚本同源。
  3. 测试脚本向selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core发送JS命令通知selenium Core执行操作浏览器的请求。
  4. Selenium Core收到指令后,执行测试脚本里指定的网页操作命令。
  5. 浏览器收到新的请求信息,于是发送Http请求给Selenium给Selenium Core里的Http Proxy,请求新的Web页面。(因为第二步中,selenium Server在启动浏览器的时候,已经把浏览器的代理地址设定为Selenium Server的Http Proxy)
  6. Selenium Server接收到请求后,自行重组http请求,向应用服务器发送请求并获取返回的web页面。
  7. Selenium Server的Http Proxy把接收的Web页面返回给浏览器

简述:

  1. 客户端建立与 selenium-RC server 的连接。
  2. Selenium RC Server 启动一个浏览器(或是已经使用中),并注入 JS 代码
  3. 将 Selenese 代码传到客户端的 Selenium-Core 中。
  4. Selenium-Core 翻译并解析执行用户录制的操作。
  5. 让代理 Server 进行通讯
  6. Remote Control Server 负责跟远程 Web 应用服务器进行通讯。
  7. 操作完成,显示结果,并执行下一指令。

以上就是 Selenium Remote Control 的执行原理。


Selenium- WebDriver工作原理

三个模块:

  1.  自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动)
  2. 浏览器驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器
  3. 浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。

Selenium脚本执行时后端六条实现的流程

  1. 对于每一条Selenium脚本,一个http 请求会被创建并且发送给浏览器的驱动。
  2. 浏览器驱动中包含了一个HTTP Server,用来接收这些 http 请求
  3. HTTP Server接收到请求后根据请求来具体操控对应的浏览器
  4. 浏览器执行具体的测试步骤
  5. 浏览器将步骤执行结果返回给HTTP Server
  6. HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。

2. Selenium  框架使用

2.1 Selenium  安装与环境配置

  • 安装selenium

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/

  • 安装chrome驱动程序要 selenium 与浏览器配合工作就必须安装浏览器对应的驱动程序。

chrome版本查看: chrome://version/

下载地址:https://npm.taobao.org/mirrors/chromedriver/

ChromeDriver 官方网站 https://sites.google.com/chromium.org/driver/downloads

下载chromedrive.exe的驱动程序,然后把它复制到python38\Scripts\目录下。


cmd命令打开命令行界面,输入“chromedriver”启动该驱动程序,查看是否配置成功。

 2.2 常用指令

(1) 程序先从selenium引入webdriver,引入chrome程序的选择项目Options:

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

(2) 设置启动chrome时不可见:

chrome_options.add_argument('--headless')

chrome_options.add_argument('--disable-gpu')

(3) 创建chome浏览器:

driver= webdriver.Chrome(chrome_options=chrome_options)

这样创建的chrome浏览器是不可见的,仅仅使用:

driver= webdriver.Chrome()

创建chrome浏览器,那么在程序执行时会弹出一个chrome浏览器。

(4) 使用driver.get(url)方法访问网页:

driver.get("http://127.0.0.1:5000")

(5) 通过driver.page_source 获取网页HTML代码(渲染后的数据页面): html=driver.page_source

print(html)

(6) driver.get_cookies()  获得页面的cookies

(7) 使 driver.current_url  查看请求的URL

(8) 用driver.close()关闭页面。driver.quit()关闭浏览器:

driver.close()

driver.quit()

(9)操作点击事件:

click()

(10)给输入框赋值:

send_keys()

编写Selenium爬虫程序

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome()
driver.get("http://127.0.0.1:5000")
html = driver.page_source
soup = BeautifulSoup(html, "lxml")
hMsg = soup.find("span", attrs={"id": "hMsg"}).text
print(hMsg)
jMsg = soup.find("span", attrs={"id": "jMsg"}).text
print(jMsg)
sMsg = soup.find("span", attrs={"id": "sMsg"}).text
print(sMsg)

运行结果:

Html Message

JavaScript Message

Server Message

        采用Selenium的结构主要是模拟浏览器去访问网页,并充分执行网页中的 JavaScript程序,使得网页的数据充分下载,这样再用爬虫程序去爬取数据就能正确的爬取。


下一篇文章:5.3 Selenium 查找HTML元素

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值