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. [git] 常用配置

    基本配置 对git进行配置时使用 git config 命令进行操作 1. git config 的作用域,缺省等于 local git config --local   #只针对某个仓库有效 git ...

  2. Javascript 实现[网红] 时间轮盘

    话不多说,先上图. 成品链接 大致效果如上图,接下来就开始制作吧. HTML部分: 我们需要将容器旋转rotate使之以圆点为中心. 怎么转呢,请看图. 将同一级的容器用一个大的容器包裹起来,绝对定位 ...

  3. ubuntu16.04 编译出错:fatal error: SDL/SDL.h: No such file or directory

    在ubuntu 16.04编译神经网络代码时候,遇到了这样一种错误? fatal error: SDL/SDL.h: No such file or directory 原因是SDL库没有安装,根据你 ...

  4. redis lru实现策略

    转载自http://blog.chinaunix.net/uid-20708886-id-5753422.html 在使用redis作为缓存的场景下,内存淘汰策略决定的redis的内存使用效率.在大部 ...

  5. C# 线程中使用delegate对控件进行操作

    如果在线程中想改变控件的值是不可以的,会报出以下错误. 那么,如何在线程中改变控件上的值呢?第一个想到的就是委托. 委托定义:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行 ...

  6. 如何把checkbox做成radio一样的单选效果

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>复 ...

  7. linux arm 交叉编译ACE(ubuntu16.04)

    解压ace包 tar zxvf ACE_6.1.0.tar.gz 在终端设置环境变量 sudo gedit /etc/profile 在打开的内容添加 export ACE_ROOT=/home/xx ...

  8. Java工程师学习指南 完结篇

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

  9. Java 范例 - 字节处理

    前言 Java 编程中常会遇到需要进行字节处理的地方,本篇文章就来探讨编程中会遇到的字节处理问题. 字节序 字节序(endianness)是对于多字节数据来说的,它描述了多字节数据存储的顺序,分为大端 ...

  10. Django | 模型类变更后生成迁移文件,报错:You are trying to add a non-nullable field 'BookName' to BookInfo without a default....

    报错: You are trying to add a non-nullable field 'BookName' to BookInfo without a default; we can't do ...