selenium百度搜索,结果列表翻页查询

by:授客 QQ1033553122

实例:百度搜索,结果列表翻页查询

解决问题:解决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 之百度搜索,结果列表翻页查询的更多相关文章

  1. (java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出

    selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以 ...

  2. python使用get在百度搜索并保存第一页搜索结果

    python使用get在百度搜索并保存第一页搜索结果 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用在意我的感受 #coding:utf-8 import ur ...

  3. Springboot+Vue实现仿百度搜索自动提示框匹配查询功能

    案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...

  4. django分页及搜索后如何翻页

    django自带了Pagnator 导入 from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage 分页 def ...

  5. MySQL翻页查询技巧

    在查询大量数据库,一般都会采用翻页.自然会想到offset跟limit. 今天知道了一个技巧,用id查询.因为id是主键,查起来很快. 思路是:给id一个区间做where条件,将数据分隔成几份,然后每 ...

  6. mysql实战优化之二:limit优化(大表翻页查询时) sql优化

    mysql的表test中有20105119行数据.建立索引:data_status,place_cargo_status 场景1: SELECT id, resource_id, resource_t ...

  7. python selenium实现百度搜索

    1.环境 python2.7+selenium+phantomjs+linux 2.代码 #-*-coding:utf-8 -*- from selenium import webdriver fro ...

  8. centos中less翻页查询的用法

    用法实例: cat 21342.log | less

  9. MySql翻页查询

    分页查询在网页中随处可见,那原理是什么呢?下面简单介绍一下基于MySql数据库的limit实现方法. 首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会 ...

随机推荐

  1. 转---JS 一定要放在 Body 的最底部么?聊聊浏览器的渲染机制

    作者:德来 segmentfault.com/a/1190000004292479 如有好文章投稿,请点击 → 这里了解详情 一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如: ...

  2. Swift5 语言指南(十六) 初始化

    初始化是准备要使用的类,结构或枚举的实例的过程.此过程涉及为该实例上的每个存储属性设置初始值,并执行在新实例准备好使用之前所需的任何其他设置或初始化. 您可以通过定义实现这个初始化过程初始化,这就像特 ...

  3. 1,rocketmq 的原理与安装教程

    参考文档 http://blog.csdn.net/a19881029/article/details/34446629 https://github.com/alibaba/RocketMQ htt ...

  4. centos7防火墙管理的变化

    当我们在centos7中输入service iptables status 查看系统的防火墙状态,会出现如下错误: 网上查阅才知道centos7的防火墙管理工具变了,原来的iptables已经不用了, ...

  5. IOS 整体框架类图值得收藏

    Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. 1.Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境. 是什么因素使一个程序成为Co ...

  6. [EXP]Microsoft Windows 10 - XmlDocument Insecure Sharing Privilege Escalation

    Windows: XmlDocument Insecure Sharing Elevation of Privilege Platform: Windows (almost certainly ear ...

  7. 课程四(Convolutional Neural Networks),第四 周(Special applications: Face recognition & Neural style transfer) —— 3.Programming assignments:Face Recognition for the Happy House

    Face Recognition for the Happy House Welcome to the first assignment of week 4! Here you will build ...

  8. 3.spring环境搭建

    1. 导入jar     1.1 四个核心包一个日志包(commons-logging)

  9. 服务端如何安全获取客户端请求IP地址

    服务端如何获取客户端请求IP地址,网上代码一搜一大把.其中比较常见有x-forwarded-for.client-ip等请求头,及remote_addr参数,那么为什么会存在这么多获取方式,以及到底怎 ...

  10. Android生成二维码--拍照或从相册选取图片

    拍照或从相册选择图片是我们日常开发中经常使用到的,可以说是必须掌握的东西.上一篇我介绍了如何生成自定义二维码<Android生成自定义二维码>,其中logo和代替黑色色块的图片都是写死的, ...