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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
python 中split 和 strip的实例详解
Jul 12 Python
python实现神经网络感知器算法
Dec 20 Python
python 读取修改pcap包的例子
Jul 23 Python
python实现桌面气泡提示功能
Jul 29 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
Python 使用dict实现switch的操作
Apr 07 Python
pytorch中[..., 0]的用法说明
May 20 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中的按位与和按位或操作示例
2014/01/27 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
php微信开发之谷歌测距
2018/06/14 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
python聊天程序实例代码分享
2013/11/18 Python
Python中的列表知识点汇总
2015/04/14 Python
常见的python正则用法实例讲解
2016/06/21 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
详解Python 切片语法
2019/06/10 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
python如何实现代码检查
2019/06/28 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
幼儿教师考核制度
2014/01/25 职场文书
捐书倡议书
2014/08/29 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript