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中的条件判断语句与循环语句用法小结
Mar 21 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
python安装scipy的方法步骤
Jun 26 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
pandas DataFrame运算的实现
Jun 14 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
基于Python爬取京东双十一商品价格曲线
Oct 23 Python
Python中的tkinter库简单案例详解
Jan 22 Python
Python经常使用的一些内置函数
Apr 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
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
PHP getName()函数讲解
2019/02/03 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
vue filters的使用详解
2018/06/11 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
Python中的面向对象编程详解(上)
2015/04/13 Python
python实现复制整个目录的方法
2015/05/12 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
Python callable内置函数原理解析
2020/03/05 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
八一建军节部队活动方案
2014/02/04 职场文书
广告学专业求职信
2014/06/19 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
2015年春节标语口号
2014/12/09 职场文书
餐馆开业致辞
2015/08/01 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js