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 相关文章推荐
Django中url的反向查询的方法
Mar 14 Python
详解tensorflow载入数据的三种方式
Apr 24 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
Apr 05 Python
python实现日志按天分割
Jul 22 Python
详解python中的index函数用法
Aug 06 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
wxPython实现整点报时
Nov 18 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
Python爬取网页信息的示例
Sep 24 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操作数组的一些函数整理介绍
2011/07/17 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
Angular的$http与$location
2016/12/26 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
Python模块常用四种安装方式
2020/10/20 Python
Bootstrap 学习分享
2012/11/12 HTML / CSS
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
通信工程专业毕业生推荐信
2013/12/25 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
新员工考核评语
2014/12/31 职场文书
贷款担保书
2015/01/20 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
工厂无线对讲系统解决方案
2022/02/18 无线电