这里之讲解用法,安装配置就不详细讲解了。我比较喜欢的浏览器驱动是ChromeDriver和无界面的PhantomJS。

一:浏览器信息测试

1.初始化浏览器

  用下面的代码初始化浏览器

from selenium import webdriver

# 把浏览器对象赋值为browser对象,然后就可以进行模拟浏览器操作
browser = webdriver.Chrome()

2.访问网页

browser.get('url地址')
# 这个是打印网页源代码
print(browser.page_source)
browser.close() # 处理完后要关闭这个对象

二:查找结点

  我们要想执行某个操作,比如填充表单,模拟点击等,或者向某个输入框输入文字,首先要知道位置,而selenium提供了一系列的查找节点的方法,如下。

1.单个节点

查找方法 说明
find_element_by_id 通过id来查找标签
find_element_by_name 通过name属性来查找标签
find_element_by_xpath 通过xpath来查找标签
find_element_by_link_text 通过链接的文字来查找标签
find_element_by_partial_link_text 通过链接的关键字来查找标签
find_element_by_tag_name 通过标签名来查找标签
find_element_by_class_name 通过class的属性来查找标签
find_element_by_css_selector 通过css选择器来查找标签

还有一种通用方法是find_element()传两个参数,一个是By.查找方式,一个是值,比如find_element(By.ID,id)和find_element_by_id结果一致。

2.多个节点

  查找多个节点的时候,直接在查找单个节点的方法中加上s,如find_elements_by_name或者find_elements(By.NAME,name),列表中的每一个节点都是WebElement类型。

三:测试动作

1.简单的交互

  selenium可以驱动浏览器执行一些操作,就是让浏览器模拟执行一些动作。下面是一些常见方法总结。

方法 说明
send_keys 输入文字
clear 清空文字
click 点击按钮

2.特殊的交互

  有一些交互操作没有特定的执行对象,比如鼠标拖曳,键盘按键等,这些相对复杂的动作用动作链的方式执行。这里暂时用不到,先略过。

3.模拟运行JavaScript

  用execute_script()方法可以模拟运行JavaScript,基本上所有复杂的动作都可以用执行JavaScript的方式来实现。

四:获取节点信息

  用 get_attribute() 方法来获取节点的属性。

  用 text 属性来获取节点的文本值。

  用 id 属性来获取节点id。

  用 location 属性来获取节点在页面中的相对位置。

  用 tag_name 属性来获取标签名称。

  用 size 属性来获取节点的大小。

五:切换子页面Frame

  网页有一种节点是iframe,也就是子Frame,相当于页面的子页面。网页打开的时候,默认是在父级Frame里面进行操作,要获取子Frame的节点,需要用到switch_to.frame()方法进行切换。

  用switch_to.parent_frame()可以获取到父页面的内容。

六,延时请求

  在selenium中,get()方法会在网页框架加载完成后结束执行,此时如果获取网页源码,可能并不是浏览器完全加载的页面,如果有额外的ajax请求,网页源代码也不一定能成功获取,需要延时等待一定时间,确保 动态网页源代码 全部加载出来。

  等待方式有两种,一种是隐式等待,一种是显式等待。

1.隐式等待

  隐式等待就是一般的等待,在执行测试的时候,先等待完之后,再进行接下来的步骤,用implicitly_wait(),参数是时间。

2.显式等待

  隐式等待的效果并没有那么好,只是规定了一个固定的时间,而网页的加载时间会受到网络条件的影响。

  这里有一个显式等待的方法就是指定要查找的节点,然后指定一个最长等待时间,在规定的时间内加载出来就返回,加载不出来,则抛出异常。

示例如下:

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 EC browser = webdriver.Chrome()
browser.get('url地址')
# 先指定最长等待时间为20s
wait = WebDriverWait(browser,20)
# 传入等待条件expected_conditions,这里的presence_of_element_located代表节点出现的意思
input = wait.until(EC.presence_of_element_located(By.ID,'a'))
# 按钮等待条件,这里的element_to_be_clickable表示可点击的,10秒内能点击,就成功
button = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,'.btn-ss'))
print(input,button)

下面是 所有的等待条件 :

等待条件 说明
title_is 标题是某内容
title_contains 标题包含某内容
presence_of_all_elements_located 某个节点是否加载出来
visibility_of_element_located 某个节点是否可见
visibility_of 某个节点是否可见,传入节点对象
presence_of_all_elements_located 所有节点加载出来
text_to_be_present_in_element 某个节点文本包含某文字
text_to_be_present_in_element_value 某个节点值包含某文字
frame_to_be_available_and_switch_to_it 加载并切换
invisibility_of_element_located 节点不可见
element_to_be_clickable 节点可点击
staleness_of 判断一个节点是否存在DOM,可判断页面是否已刷新
element_to_be_selected 节点可选择,传入节点对象
element_located_to_be_selected 节点可选择,传入定位元组
element_selection_state_to_be 传入节点对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现警告

七:前进和后退

  selenium测试用back()方法后退,用forward()方法前进。

八:Cookies

  使用selenium可以方便地对Cookies进行操作。

  用get_cookies()方法获取所有的Cookies。

  用add_cookies()方法增加Cookies。

  用delete_all_cookies()和delete_cookies()方法删除Cookies。

八:选项卡处理

  在访问网页的时候,会开启一个个选项卡,在selenium中也可以对选项卡进行操作。

browser.execute_script('windows.open()')
print(window_handles)
browser.switch_to_window(browser.window_handles[1])

  用execute_script方法执行JavaScript语句,这里的window_handles获取当前开启的所有选项卡,返回的是选项卡的代号列表。用browser.window_handles[index]即可以跳转到index索引对应的选项卡。

九:捕获异常

  捕获异常是经常要用到的方法,语句是try-except-finally,对于不同的错误,无论是网络连接,代码运行时间超时,还是数据未找到,都十分有用。

selenium自动化测试爬取动态页面大全的更多相关文章

  1. selenium+phantomjs爬取动态页面数据

    1.安装selenium pip/pip3 install selenium 注意依赖关系 2.phantomjs for windows 下载地址:http://phantomjs.org/down ...

  2. phantomjs+selenium实现爬取动态网址

    之前使用 selenium + firefox驱动浏览器来实现爬取动态网址,但是firefox经常更新,更新后时常会导致webdriver启动不来,所以改用phantomjs+selenium来改善一 ...

  3. Python 爬虫实例(8)—— 爬取 动态页面

    今天使用python 和selenium爬取动态数据,主要是通过不停的更新页面,实现数据的爬取,要爬取的数据如下图 源代码: #-*-coding:utf-8-*- import time from ...

  4. selenium + PhantomJS 爬取js页面

    from selenium import webdriver import time _url="http://xxxxxxxx.com" driver = webdriver.P ...

  5. Scrapy 爬取动态页面

    目前绝大多数的网站的页面都是冬天页面,动态页面中的部分内容是浏览器运行页面中的JavaScript 脚本动态生成的,爬取相对比较困难 先来看一个很简单的动态页面的例子,在浏览器中打开 http://q ...

  6. 爬虫 selenium+Xpath 爬取动态js页面元素内容

    介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如 ...

  7. scrapy模拟浏览器爬取验证码页面

    使用selenium模块爬取验证码页面,selenium模块需要另外安装这里不讲环境的配置,我有一篇博客有专门讲ubuntn下安装和配置模拟浏览器的开发 spider的代码 # -*- coding: ...

  8. selenium登录爬取知乎出现:请求异常请升级客户端后重试的问题(用Python中的selenium接管chrome)

    一.问题使用selenium自动化测试爬取知乎的时候出现了:错误代码10001:请求异常请升级客户端后重新尝试,这个错误的产生是由于知乎可以检测selenium自动化测试的脚本,因此可以阻止selen ...

  9. Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

随机推荐

  1. Go语言底层知识总结【新手必学】

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:YID_152接下来我们来给大家分享想go的基础知识要点:如果你也刚学 ...

  2. CentOS 7上的进程管理

    一些杂乱的基础概念 程序是一种静态的文件,躺在磁盘上.而进程则是将程序运行起来放置于内存中.因此进程就是运行中的程序,是程序运行起来的一个实例.同一个程序可以运行为多个进程/实例. 进程之间有父子关系 ...

  3. 参加杭州 2019 AI Bootcamp有感与总结(1)

    上周末参加了微软人工智能的活动,感慨多多. 感谢活动主讲和主办方. 通过参加活动,对微软认知服务和ML.NET的现状与发展有了更多的认识.文章不是活动内容的堆叠,总结少点,更多的大概是感慨. 微软认知 ...

  4. 如何使用 RxJS 更优雅地进行定时请求

    在用 Angular 做项目的时候,遇到了一个有点麻烦的问题.具体问题如下: 轮循请求某个接口,如何保证接口返回的数据与请求的顺序相同? 实际的业务场景是这样的:前端需要轮循请求后端接口获取文件处理进 ...

  5. 查看python版本多少位的

    正常我们在cmd终端输入python之后,如果有安装python,就会在回车之后出来关于你安装的python版本信息,几版本,多少位的,但是还有一种,像我这样只显示了python版本是3.7.5,并没 ...

  6. weui实现滚动加载的效果

    weui是微信公司提供的一个UI框架,在H5开发中一些组件可以直接使用.weui文档地址:http://www.jqweui.cn/components 使用weui,需要引入weui.css和jqu ...

  7. Linux 周期任务

    一次性任务 在某个特定的时间,执行一次后被清除 相关命令/进程 at 命令 atd进程 在centos6中,系统服务的名称: /etc/init.d/atd 查看系统上该进程时候启动: [root@e ...

  8. 利用 uDig 生成 GeoServer 可用的 SLD 渲染文件

    利用 uDig 生成 GeoServer 可用的 SLD 渲染文件 uDig简介 uDig是一个 open source (EPL and BSD) 桌面应用程序框架,构建在Eclipse RCP和G ...

  9. Android 项目优化(一):项目代码规范优化

    项目代码规范为主要包含:类,常量,变量,ID等命名规范:注释规范:分包规范:代码风格规范. 项目代码规范是软件开发过程中非常重要的优化环节. 目前的开发社区提供了很多的开发规范文档,阿里巴巴推出了&l ...

  10. Android数据库GreenDao的使用总结

    一.GreenDao的介绍 GreenDAO是一个开源的Android ORM(“对象/关系映射”),通过ORM(称为“对象/关系映射”),节省了我们在数据库开发过程的时间! 通过GreenDao,我 ...