Selenium 模拟浏览器动态加载页面的实现方法


Posted in Python onMay 16, 2018

相信爬取大公司的数据时,常常会遇到页面信息动态加载的问题,

如果仅仅使用content = urllib2.urlopen(URL).read(),估计信息是获取不全的,这时候就需要模拟浏览器加载页面的过程,

selenium提供了方便的方法,我也是菜鸟,试了很多种方式,下面提供觉得最靠谱的(已经证明对于爬取新浪微博的topic、twitter under topic完全没问题)。

至于下面的browser变量是什么,看前面的几篇文章。

首先是请求对应的URL:

right_URL = URL.split("from")[0] + "current_page="+str(current_page) + "&since_id="+str(since_id) + "&page="+str(page_index) + "#Pl_Third_App__"+str(Pl_Third_App) 
print right_URL 
try: 
browser.get(right_URL) 
print "loading more, sleep 3 seconds ... 0" 
time.sleep(3) # NO need for this sleep, but we add ... 
browser = selenuim_loading_more(browser, method_index=0) 
except: 
print "one exception happen ==> get_tweeter_under_topic 2 ..." 
pass

然后模拟浏览器,加载更多(推荐使用method_index=0,已经证明比其他好用很多):

def selenuim_loading_more(browser, method_index=0): 
  if method_index==0: 
    browser.implicitly_wait(3) # 为了快速滑动,先设置超时时间为1秒 
    # while True: 
    for i in range(1, 4): # at most 3 times 
      print "loading more, window.scrollTo bettom for the", i,"time ..." 
      browser.execute_script("window.scrollTo(0,document.body.scrollHeight);") 
      try: 
        # 定位页面底部的换页tab 
        browser.find_element_by_css_selector("div[class='W_pages']") 
        break # 如果没抛出异常就说明找到了底部标志,跳出循环 
      except NoSuchElementException: 
        pass # 抛出异常说明没找到底部标志,继续向下滑动 
    browser.implicitly_wait(4) # 将超时时间改回10秒 
  elif method_index==1: 
    browser.find_element_by_css_selector("div[class='empty_con clearfix']").click() # loading more 
    print "loading more, sleep 4 seconds ... 1" 
    time.sleep(4) 
    browser.find_element_by_css_selector("div[class='empty_con clearfix']").click() # loading more 
    print "loading more, sleep 3 seconds ... 2" 
    time.sleep(2) 
  elif method_index==2: 
    load_more_1 = browser.find_element_by_css_selector("div[class='empty_con clearfix']") # loading more         
    ActionChains(browser).click(load_more_1).perform() 
    print "loading more, sleep 4 seconds ... 1" 
    time.sleep(4) 
    load_more_2 = browser.find_element_by_css_selector("div[class='empty_con clearfix']") # loading more         
    ActionChains(browser).click(load_more_2).perform() 
    print "loading more, sleep 3 seconds ... 2" 
    time.sleep(2) 
  elif method_index==3: 
    print "loading more, sleep 4 seconds ... 1" 
    element = WebDriverWait(browser, 4).until( 
      EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class='empty_con clearfix']")) 
    ) 
    element.click() 
    print "loading more, sleep 2 seconds ... 2" 
    WebDriverWait(browser, 2).until( 
      EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class='empty_con clearfix']")) 
    ).click() 
  return browser

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
使用Python对Excel进行读写操作
Mar 30 Python
微信跳一跳自动运行python脚本
Jan 08 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
pycharm下pyqt4安装及环境配置的教程
Apr 24 Python
Python3自定义json逐层解析器代码
May 11 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
django 认证类配置实现
Nov 11 Python
Python selenium实现微博自动登录的示例代码
May 16 #Python
Python实现统计给定字符串中重复模式最高子串功能示例
May 16 #Python
Python(Django)项目与Apache的管理交互的方法
May 16 #Python
Python检测网络延迟的代码
May 15 #Python
在windows下Python打印彩色字体的方法
May 15 #Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 #Python
Python切片索引用法示例
May 15 #Python
You might like
浅析php中json_encode()和json_decode()
2014/05/25 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
求职简历自荐信
2013/10/20 职场文书
食堂员工工作职责
2013/12/18 职场文书
给学校的建议书400字
2015/09/14 职场文书
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server