selenium 之百度搜索,结果列表翻页查询
selenium之百度搜索,结果列表翻页查询
by:授客 QQ:1033553122
实例:百度搜索,结果列表翻页查询
解决问题:解决selenium driver获取web页面元素时,元素过期问题
思路1:获取所有“页面翻页链接”元素,然后遍历元素并点击
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
if __name__ == "__main__":
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.implicitly_wait(5)
driver.find_element_by_id('kw1').send_keys('selenium')
driver.find_element_by_id('su1').click()
page = driver.find_element_by_id('page')
pages = page.find_elements_by_tag_name('a') #查找所有翻页跳转链接
#设置滚动条位置为底部
js = 'document.documentElement.scrollTop=10000'
for each in pages:
driver.execute_script(js) #拖动滚动条到底部
each.click()
driver.execute_script(js)
time.sleep(3)
driver.quit()
结果:点击第3页时,程序出错
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中的与这个页面相关的元素也被清空了
思路2:基于思路1的错误结果分析>先获取每个页面数,然后每次点击某个页面,跳转后重新获取下一个页面翻页链接,然后点击,循环。。
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
if __name__ == "__main__":
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.implicitly_wait(5)
driver.find_element_by_id('kw1').send_keys('selenium')
driver.find_element_by_id('su1').click()
page = driver.find_element_by_id('page')
pages = page.find_elements_by_tag_name('a')
js = 'document.documentElement.scrollTop=10000'
total = len(pages)
has_pre_page = False
page_num = 0
for i in range(total):
driver.execute_script(js)
pn=10
page_num = page_num + 1 #设置页面号
one_page = driver.find_element_by_css_selector('p[id="page"]>a:nth-of-type('+str(page_num)+')')
one_page.click()
#备注以下小段代码描述了页面变化规律,这个得自己去研究
if not has_pre_page: #点击第2页时会出现上一页,页号加1
has_pre_page = True
page_num = page_num + 1
if page_num % 7 == 0: #page_num等于7时,页号减1
page_num = page_num - 1
time.sleep(2)
driver.execute_script(js)
time.sleep(2)
time.sleep(3)
driver.quit()
改进版(自动翻页,前翻页后翻页)
# -*-
coding: utf-8 -*-
from selenium import webdriver
import time
if
__name__ ==
"__main__":
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.implicitly_wait(5)
driver.find_element_by_id('kw1').send_keys('selenium
selenium')#测试数据
selenium
zhidashso dld#selenium zhidashso dldld
driver.find_element_by_id('su1').click()
js = 'document.documentElement.scrollTop=10000'
total = 0
#页面数
is_next_page = True #存在下一页
page_num = 0 #要点击的页面号
#往后翻页
while
is_next_page:#'sv_page\=1' in
one_page.get_attribute('href')
driver.execute_script(js)
page_num = page_num + 1
#设置页号为下一页
total = page_num
#记录页面数
value=str(page_num)
try:
#查找指定页面
one_page =
driver.find_element_by_css_selector('p[id="page"]>a[href*=pn\='+value+']')
one_page.click()
time.sleep(1)
driver.execute_script(js)
time.sleep(1)
except:
print('no
next page')
is_next_page = False
total = total - 1
break
#往前翻页
while
total >=
0:
driver.execute_script(js)
try:
total = total -1
value = str(total)
one_page =
driver.find_element_by_css_selector('p[id="page"]>a[href*=pn\='+value+']')
one_page.click()
time.sleep(1)
driver.execute_script(js)
time.sleep(1)
except:
print('no
pre page')
break;
time.sleep(3)
driver.quit()
selenium 之百度搜索,结果列表翻页查询的更多相关文章
- (java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出
selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以 ...
- python使用get在百度搜索并保存第一页搜索结果
python使用get在百度搜索并保存第一页搜索结果 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用在意我的感受 #coding:utf-8 import ur ...
- Springboot+Vue实现仿百度搜索自动提示框匹配查询功能
案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...
- django分页及搜索后如何翻页
django自带了Pagnator 导入 from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage 分页 def ...
- MySQL翻页查询技巧
在查询大量数据库,一般都会采用翻页.自然会想到offset跟limit. 今天知道了一个技巧,用id查询.因为id是主键,查起来很快. 思路是:给id一个区间做where条件,将数据分隔成几份,然后每 ...
- mysql实战优化之二:limit优化(大表翻页查询时) sql优化
mysql的表test中有20105119行数据.建立索引:data_status,place_cargo_status 场景1: SELECT id, resource_id, resource_t ...
- python selenium实现百度搜索
1.环境 python2.7+selenium+phantomjs+linux 2.代码 #-*-coding:utf-8 -*- from selenium import webdriver fro ...
- centos中less翻页查询的用法
用法实例: cat 21342.log | less
- MySql翻页查询
分页查询在网页中随处可见,那原理是什么呢?下面简单介绍一下基于MySql数据库的limit实现方法. 首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会 ...
随机推荐
- Lucene 4.X 全套教程
http://www.cnblogs.com/forfuture1978/category/300665.html Lucene 4.X 倒排索引原理与实现: (3) Term Dictionary和 ...
- LeetCode:145_Binary Tree Postorder Traversal | 二叉树后序遍历 | Hard
题目:Binary Tree Postorder Traversal 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...
- ffmpeg 视频实现各种特效
直接上命令: //渐入i in.mp4 -vf fade=in:0:90 out.mp4 //黑白 i in.mp4 -vf lu ...
- Maven项目报错:Missing artifact****和ArtifactDescriptorException: Failed to read artifact descriptor for***和Cannot change version of project facet Dynamic web module to 2.5
一.关于Cannot change version of project facet Dynamic web module to 2.5 具体查看博客:http://blog.csdn.net/ste ...
- myslide 插件开发知识点总结和 css3 动画性能问题的研究
myslide 插件开发知识点总结和 css3 动画性能问题的研究 这篇文章主要是总结最近开发过程中遇到的问题.有几个问题又是不容易发现原因的问题,但是最后的结果又是很简单的. 1.手机端的 slid ...
- mysql 开发进阶篇系列 32 工具篇(mysqladmin工具)
一.概述 mysqladmin是一个执行管理操作的客户端程序.用来检要服务的配置和当前的状态,创建并删除数据库等.功能与mysql客户端类似,主要区别在于它更侧重于一些管理方面的功能.1. 查找mys ...
- hashCode()方法和equal()方法的区别
本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...
- WINDOWS内核编程(一)Hello Drv的实现
我们开始编写第一个驱动程序,首先我们需要进行项目的创建,在以前的随笔中,我们已经学会了如何去建立双机调试环境. 我们打开VS2017,建立如图所示的项目,取名为:MyFirstDriver.点击确定 ...
- MongoDB的aggregate聚合
聚合框架中常用的几个操作: $project:修改输入文档的结构.可以用来重命名.增加或删除域,也可以用于创建计算结果以及嵌套文档.(显示的列,相当遇sql 的) $match:用于过滤数据,只输出符 ...
- 负载均衡+session共享(memcached-session-manager实现)
前言 先给大家伙拜个年,祝大家:新的一年健健康康,平平安安! 本文的形成参考了很多人的博客,最多的应该是青葱岁月兄的这篇博客,大家可以先去看下,熟悉一些内容,因为本文是直接实践,一些理论性的知识就需要 ...