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的内建模块collections的教程
Apr 28 Python
Python中max函数用法实例分析
Jul 17 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
python实现rsa加密实例详解
Jul 19 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
Python WEB应用部署的实现方法
Jan 02 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
详解如何使用Pytest进行自动化测试
Jan 14 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 date()日期时间函数详解
2010/05/16 PHP
PHP安全性漫谈
2012/06/28 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
python检查指定文件是否存在的方法
2015/07/06 Python
python从入门到精通(DAY 3)
2015/12/20 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
投标单位介绍信
2014/01/09 职场文书
街道社区活动报告
2015/02/05 职场文书
党员个人自我评价
2015/03/03 职场文书
暑假打工感想
2015/08/07 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python