场景

我们在测试一个web 应用时,经常出现翻页的情况,下面介绍翻页场景

代码

  1. #!/usr/bin/env python
  2. # -*- codinfg:utf-8 -*-
  3. '''
  4. @author: Jeff LEE
  5. @file: 翻页.py
  6. @time: 2018-09-26 11:14
  7. @desc:
  8. '''
  9. from selenium import webdriver
  10. from selenium.webdriver.common.action_chains import ActionChains
  11. import time
  12.  
  13. driver = webdriver.Firefox()
  14. #添加智能等待
  15. driver.implicitly_wait(10)
  16.  
  17. driver.get('https://www.baidu.com/')
  18. driver.find_element_by_id('kw').send_keys('uniquefu')
  19.  
  20. driver.find_element_by_id('su').click()
  21.  
  22. page = driver.find_element_by_id('page')
  23. pages = page.find_elements_by_tag_name('a') #查找所有翻页跳转链接
  24. time.sleep(5)
  25.  
  26. js = 'document.documentElement.scrollTop=10000'
  27. total = 0 #页面数
  28. is_next_page = True #存在下一页
  29. page_num = 0 #要点击的页面号
  30.  
  31. #往后翻页
  32. while page_num <10: #也可以通过is_next_page进行判断循环
  33. driver.execute_script(js)
  34. page_num = page_num + 1 #设置页号为下一页
  35. total = page_num #记录页面数
  36. value=str(page_num)
  37. try:
  38. #查找指定页面
  39. xpath= "//div[@id='page']/a[contains(@href,'pn=%s')]" %value
  40. print(xpath)
  41. one_page = driver.find_element_by_xpath(xpath)
  42. one_page.click()
  43. time.sleep(1)
  44. driver.execute_script(js)
  45. time.sleep(1)
  46.  
  47. except:
  48. print('no next page')
  49. is_next_page = False
  50. total = total - 1
  51. break
  52.  
  53. #往前翻页
  54. while total >= 0:
  55.  
  56. driver.execute_script(js)
  57.  
  58. try:
  59. total = total -1
  60. value = str(total)
  61. xpath = "//div[@id='page']/a[contains(@href,'pn=%s')]" % value
  62. print(xpath)
  63. one_page = driver.find_element_by_xpath(xpath)
  64. one_page.click()
  65. time.sleep(1)
  66. driver.execute_script(js)
  67. time.sleep(1)
  68.  
  69. except:
  70. print('no pre page')
  71. break;
  72.  
  73. time.sleep(3)
  74. driver.quit()

 

遇到问题:

selenium.common.exceptions.StaleElementReferenceException: Message: u'Element not found in the cache - perhaps the page has changed since it was looked up' ; Stacktrace:

即在cache中找不到元素,可能是在元素被找到之后页面变换了。 这就说明,当前页面发生跳转之后,存在cache中的与这个页面相关的元素也被清空了,因此跳转后需要重新获取下一个页面翻页链接,然后点击。

备注:

对于类型博客类型的翻页不需要那么麻烦,因为翻页后页面链接不会发生变化

Python+Selenium学习--分页处理的更多相关文章

  1. 【python+selenium学习】Python常见错误之:IndentationError: unexpected indent

    初入python+selenium学习之路,总会遇到这样那样的问题.IndentationError: unexpected indent,这个坑我已经踏进数次了,索性记录下来.都知道Python对代 ...

  2. Python+Selenium学习--自动化测试模型

    前言 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块.自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试.数据驱动测试.对 ...

  3. Python+Selenium学习笔记15 - 读取txt和csv文件

    读取txt的内容并用百度查找搜索 1 # coding = utf-8 2 3 from selenium import webdriver 4 import time 5 6 # 打开浏览器 7 d ...

  4. web自动化测试python+selenium学习总结----selenium安装、浏览器驱动下载

    一.安装selenium 命令安装selenium库 :pip  install -U selenium 查看selenium是否安装成功:pip list PS:有时会有异常,安装失败,可以尝试去s ...

  5. Python+Selenium学习--自动生成HTML测试报告

    前言 在脚本运行完成之后,除了在log.txt 文件看到运行日志外,我们更希望能生一张漂亮的测试报告来展示用例执行的结果.        HTMLTestRunner 是Python 标准库的unit ...

  6. Python+Selenium学习--异常截图

    前言 Webdriver 提供错误截图函数get_screenshot_as_file(),可以帮助我们跟踪bug,在脚本无法继续执行时候, get_screenshot_as_file()函数将截取 ...

  7. Python+Selenium学习--cookie处理

    场景 有时候我们需要验证浏览器中是否存在某个cookie,因为基于真实的cookie 的测试是无法通过白盒和集成测试完成的.webdriver 可以读取.添加和删除cookie 信息.webdrive ...

  8. Python+Selenium学习--控制浏览器控制条

    场景 有时候web 页面上的元素并非直接可见的,就算把浏览器最大化,我们依然需要拖动滚动条才能看到想要操作的元素,这个时候就要控制页面滚动条的拖动,但滚动条并非页面上的元素,可以借助JavaScrip ...

  9. Python+Selenium学习--下载文件

    场景 webdriver 允许我们设置默认的文件下载路径.也就是说文件会自动下载并且存在设置的那个目录中,下面以firefox及chrome为例 代码 Firefox下载 为了让Firefox浏览器能 ...

随机推荐

  1. 网关协议学习:CGI、FastCGI、WSGI

    网关协议学习:CGI.FastCGI.WSGI https://www.biaodianfu.com/cgi-fastcgi-wsgi.html

  2. ADOQuery.Parameters: Property Parameters does not exist

    Exception class EReadError with message 'Property Parameters does not exist'. Exception class EReadE ...

  3. sql server 字符串字节长度

    SQL Server 字符个数,字节长度,len不是你想要的字节数,datalength才能得到字节数 select len('娜娜123') ,datalength('娜娜123') 5       ...

  4. keyword模块

    导入关键字模块 import keyword 列出当前系统中Python的关键字 >>> keyword.kwlist ['and', 'as', 'assert', 'break' ...

  5. weka连接mysql数据库

    一.下载并解压数据库驱动 下载地址:http://www.mysql.com/products/connector/,本文下载 mysql-connector-java-5.0.8.zip.将解压后的 ...

  6. 【378】python any() and all()

    Reference: [1] Python all() - Python Standard Library [2] Python any() - Python Standard Library all ...

  7. 4.HTTP入门.md

    目录 什么是http协议 http协议:对浏览器客户端 和 服务器端 之间数据传输的格式规范 查看http协议的工具* 使用火狐的firebug插件(右键->firebug->网络) Ht ...

  8. git-04 同意分支合并

    https://blog.csdn.net/boysky0015/article/details/78185879/

  9. GIS案例学习笔记-CAD数据分层导入现有模板实例教程

    GIS案例学习笔记-CAD数据分层导入现有模板实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 原始数据: CAD数据 目标模板 2. 任务:分5个图层 ...

  10. effective C++学习三(仅供个人学习记录,本文摘录effective C++)

    条款 3:尽量用 new 和 delete 而不用 malloc 和 free  把 new和 delete 与malloc 和 free 混在一起用也是个坏想法.对一个用 new 获取来的指针调用 ...