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加pyGame实现的简单拼图游戏实例
May 15 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
python 计算文件的md5值实例
Jan 13 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
Python Pillow Image Invert
Jan 22 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
详解python中list的使用
Mar 15 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
Django视图、传参和forms验证操作
Jul 15 Python
Python析构函数__del__定义原理解析
Nov 20 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 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关联数组的10个操作技巧
2013/01/21 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
$.format,jquery.format 使用说明
2011/07/13 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
python解析基于xml格式的日志文件
2017/02/25 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
python如何变换环境
2020/07/21 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
Ejb技术面试题
2015/04/29 面试题
实习医生自我评价
2013/09/22 职场文书
教师现实表现材料
2014/02/14 职场文书
生日寄语大全
2014/04/08 职场文书
初中生评语大全
2014/04/24 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
高三教师工作总结2015
2015/07/21 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL