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. [CocoaPods]pod安装与pod更新

    简介 许多以CocoaPods开头的人似乎认为pod install只在第一次使用CocoaPods设置项目时使用,pod update之后才会使用.但事实并非如此. 本指南的目的是解释何时使用pod ...

  2. Egg中使用egg-mongoose和常用的Mongoose 方法

    Mongoose Mongoose就是一套操作MongoDB数据库的接口,而Egg中有对应的插件egg-mongoose. 安装 $ npm install egg-mongoose --save 配 ...

  3. Ubuntu 16.04 python和OpenCV安装

    Ubuntu 16.04 python和OpenCV安装:最进在做深度学习和计算机视觉的有关内容,因此要在python中用到opencv.我的电脑装的是Ubuntu 16.04,python 2.7和 ...

  4. django rest framework通用view

    官方文档:http://www.django-rest-framework.org/ drf为我们提供强大的通用view的功能,本博客对这些view进行简要的总结分析. 首先,我们看一下主要的几种vi ...

  5. nRF52832 矩阵按键调试 同一列上的按键 任意两个按键 按下 检测不到低电平(电平拉不下来)

    参考链接:https://blog.csdn.net/zhanghuaishu0/article/details/78505045 调试过程中发现 同一列上的按键 任意两个按键 按下 检测不到低电平( ...

  6. 解决Eclipse中DDMS一直打印输出Connection attempts的问题

    Eclipse/MyEclipse出现以下错误的解决方案: [2015-01-25 16:10:29 - DeviceMonitor] Adb connection Error:远程主机强迫关闭了一个 ...

  7. [SDOI2006] 二进制方程

    并查集水题.维护变量的对应位的相关关系,判断不确定点(自由元)的个数即可. 代码中的p数组:p[1] 值的id, p[2~k+1]每个变量的第一位的id. #include <bits/stdc ...

  8. 测试工具之badboy

    badboy这个工具本身用处不是很大,但有个录制脚本的功能,还是jmeter脚本,所以针对这一点很多懒人就可以通过这个录制脚本,而不需要自己去编写 badboy工具最近还是2016年更新的,后面也没在 ...

  9. shell中的算数

    加法:let result=var1+var2result=$[$var1+var2]result=$(($var1+var2))result=`expr $var1 + $var2*` 加号前后有空 ...

  10. 一筐鸡蛋的lcm

    问题 一筐鸡蛋,一个一个取正好取完,两个两个取剩下一个,三个三个取正好取完,四个四个取剩下一个,五个五个取少一个,六个六个取剩下三个,七个七个取正好取完,八个八个取剩下一个,九个九个取正好取完,共多少 ...