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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
对于Python中线程问题的简单讲解
Apr 03 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
通过实例了解python property属性
Nov 01 Python
python3读取autocad图形文件.py实例
Jun 05 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
Python切片列表字符串如何实现切换
Aug 06 Python
Python爬取豆瓣数据实现过程解析
Oct 27 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
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
PHP对象相关知识总结
2017/04/09 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
浅析PHP开发规范
2018/02/05 PHP
javascript引用对象的方法
2007/01/11 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
react-native 封装选择弹出框示例(试用ios&android)
2017/07/11 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
Python开发编码规范
2006/09/08 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
python监控键盘输入实例代码
2018/02/09 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
Python中如何导入类示例详解
2019/04/17 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
django 模型中的计算字段实例
2020/05/19 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
python statsmodel的使用
2020/12/21 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
教师评优事迹材料
2014/01/10 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
理发店策划方案
2014/06/05 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
2014年招商工作总结
2014/11/22 职场文书
Oracle用户管理及赋权
2022/04/24 Oracle