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实现二分法算法实例
Feb 02 Python
Python字符串详细介绍
May 09 Python
Python生成不重复随机值的方法
May 11 Python
Python的time模块中的常用方法整理
Jun 18 Python
python smtplib发送带附件邮件小程序
May 22 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
用python写测试数据文件过程解析
Sep 25 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
python实现mean-shift聚类算法
Jun 10 Python
Python 匹配文本并在其上一行追加文本
May 11 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 mysql数据库操作类
2008/06/04 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
js 与或运算符 || && 妙用
2009/12/09 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
Python中装饰器高级用法详解
2017/12/25 Python
python实现京东秒杀功能
2018/07/30 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
德国帽子专家:Hutshopping
2019/11/03 全球购物
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
《她是我的朋友》教学反思
2014/04/26 职场文书
村抢险救灾方案
2014/05/09 职场文书
运动会标语
2014/06/21 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
农村党员对照检查材料
2014/09/24 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
python中pymysql包操作数据库方法
2022/04/19 Python