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数组条件过滤filter函数使用示例
Jul 22 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
Django异步任务之Celery的基本使用
Mar 23 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
python 监测内存和cpu的使用率实例
Nov 28 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 Python
Python实现聚类K-means算法详解
Jul 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
php HandlerSocket的使用
2011/05/02 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
php生成zip文件类实例
2015/04/07 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
jquery 最简单的属性菜单
2009/10/08 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
深入理解python多进程编程
2016/06/12 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python getopt模块使用实例解析
2019/12/18 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
幼师自荐信
2013/10/26 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
爱牙日活动总结
2014/08/29 职场文书
参观邀请函范文
2015/02/02 职场文书
社区工作者个人总结
2015/02/28 职场文书
决心书格式及范文
2019/06/24 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle