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 04 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
Python字符串处理实现单词反转
Jun 14 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
图解Python变量与赋值
Apr 03 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Python八皇后问题解答过程详解
Jul 29 Python
python 有效的括号的实现代码示例
Nov 11 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Python办公自动化解决world文件批量转换
Sep 15 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
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
解析link_mysql的php版
2013/06/30 PHP
php中JSON的使用与转换
2015/01/14 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python中交换两个元素的实现方法
2018/06/29 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
乌鸦喝水教学反思
2014/02/07 职场文书
统计岗位职责
2014/02/21 职场文书
经典英文广告词
2014/03/18 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
不同意离婚上诉状
2015/05/23 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python