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

简介: selenium之百度搜索,结果列表翻页查询

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


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

解决问题:解决selenium driver获取web页面元素时,元素过期问题

 

思路1:获取所有“页面翻页链接”元素,然后遍历元素并点击

# -*- coding: utf-8 -*-

fromseleniumimportwebdriver

importtime

 

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'

  foreachinpages:

       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 -*-

 

fromseleniumimportwebdriver

importtime

 

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

  foriinrange(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()

   

       #备注以下小段代码描述了页面变化规律,这个得自己去研究

 ifnothas_pre_page: #点击第2页时会出现上一页,页号加1

           has_pre_page =True

           page_num = page_num +1

      ifpage_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 -*-

 

fromseleniumimportwebdriver

importtime

 

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  #要点击的页面号

 

   #往后翻页

  whileis_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      

 

   #往前翻页

  whiletotal >=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()

 





目录
相关文章
|
2月前
|
缓存 API 定位技术
使用Python调用百度地图API实现地址查询
使用Python调用百度地图API实现地址查询
176 0
|
8月前
|
Web App开发 前端开发 Java
百度搜索:蓝易云【selenium基础语法详解。】
上述是Selenium的基础语法,用于自动化Web浏览器的测试和操作。具体的用法可能因使用的编程语言和具体的应用场景而有所不同。建议您参考Selenium的官方文档或相关教程以获取更详细和准确的语法和示例代码。
258 2
|
9月前
|
搜索推荐 BI
从百度搜索结果列表里点击 CSDN 博客时 url 参数的含义
从百度搜索结果列表里点击 CSDN 博客时 url 参数的含义
|
12月前
|
JavaScript 前端开发 API
python对接API二次开发高级实战案例解析:百度地图Web服务API封装函数(行政区划区域检索、地理编码、国内天气查询、IP定位、坐标转换)
python对接API二次开发高级实战案例解析:百度地图Web服务API封装函数(行政区划区域检索、地理编码、国内天气查询、IP定位、坐标转换)
315 0
|
2月前
|
Web App开发 IDE 测试技术
实战练习:用airtest-selenium脚本爬取百度热搜标题
实战练习:用airtest-selenium脚本爬取百度热搜标题
|
7月前
|
Web App开发 Docker 容器
百度搜索:蓝易云【用docker搭建selenium grid分布式环境实践】
通过这些步骤,您可以使用Docker搭建Selenium Grid分布式环境,并在多个节点上并行运行Selenium测试。根据实际需求,您还可以进行更高级的配置和扩展,如增加更多的节点、配置浏览器版本等。
50 1
|
数据采集 Web App开发 存储
Java爬虫第五篇:使用selenium、Jsoup 抓取bing搜索图片
Java爬虫第五篇:使用selenium、Jsoup 抓取bing搜索图片
237 0
|
2月前
|
存储 Oracle 关系型数据库
百度搜索:蓝易云【oracle dblink mysql查询text无法显示问题】
通过使用 `DBMS_HS_PASSTHROUGH` 包执行 MySQL 查询并返回 CLOB 类型结果,可以解决 Oracle 数据库中无法直接显示 MySQL TEXT 类型数据的问题。
55 0
|
12月前
|
搜索推荐 定位技术
Echarts与bmap结合使用百度地图系统自带的12个个性化模板mapStyle列表
Echarts与bmap结合使用百度地图系统自带的12个个性化模板mapStyle列表
350 0
|
Docker Python Windows
Docker selenium 自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示
Docker selenium 自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示
989 0
Docker selenium 自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示