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  连接字符串(join %)
Sep 06 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
Win8下python3.5.1安装教程
Jul 29 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
Python机器学习之逻辑回归
May 11 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
YII路径的用法总结
2014/07/09 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
js有关元素内容操作小结
2011/12/20 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
一分钟理解js闭包
2016/05/04 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
使用Vue生成动态表单
2019/11/26 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
JS实现简单打字测试
2020/06/24 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
Python3基础之输入和输出实例分析
2014/08/18 Python
python类和继承用法实例
2015/07/07 Python
Python编写打字训练小程序
2019/09/26 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
公司活动邀请函
2014/01/24 职场文书
毕业自我鉴定书
2014/03/24 职场文书
保密承诺书
2014/03/27 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
思想政治表现评语
2015/01/04 职场文书
煤矿安全保证书
2015/02/27 职场文书
先进个人自荐书
2015/03/06 职场文书
python实现剪贴板的操作
2021/07/01 Python
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB