获取动态渲染页面(一):selenium

在上节在反爬虫策略中,如果如果数据接口有很多加密参数,例如淘宝的数据接口,qq音乐的数据接口就含有很多加密的参数,我们很难推算出其规律,也很难直接分析AJAX直接抓取。为了解决这些问题,我们可以直接使用浏览器模拟的方法来实现。这样就可以做到在浏览器看到的是什么,抓取的源码就是什么,也就是所见即所爬。这样我们就不用管网页的内部是如何利用js宣传的,也不用管AJAX通过API加载了什么。简言之直接进行了浏览器的解析,使得所有的东西都来到明面上。selenium就是一个很好的浏览器模拟工具。

一、浏览器要完成Driver配置

此配置只需三步,一是下载匹配浏览器版本的Chrome.driver.exe。二是将其放在chrome的根目录。三是在path路径中添加浏览器的路径。

二、基本使用

其核心为webdrive

1.声明浏览器
2.访问页面
from selenium import webdrive
browser=webdrive(Chrome)
browser.get(url)
print(browser.page_source)
browser.close()

这样就可以得到完整页面了。但是我们想要的肯定不止于此。selenium的功能还是很强大的。

三、selenium对于网页的查、取、操作

1.查找单个节点

查找节点和其他程序中的比较相近。提供了以下几个非常好用的查询方法:
browser.find_element_by_id(‘2’)
.find_element_by_name()
.find_elemen_by_class_name()
.find_elemen_by_tag_name()
.find_elemen_by_link_text()
.find_elemen_by_partical_link_text()
.find_element_by_xpath()
.find_element_by_css_selector()
总结来说就是支持id,name,class,link_text,partical_link_text,tag等直接获取的办法,也支持xpath和css_selector。返回的为查找的第一个对象。

2.查找多个节点

element变elements即可。不过返回的结果是一个列表。

3.利用节点和页面进行交互

selenium可以实现就像你在真正的浏览器上输入,点击一样的交互
send_keys 用于input
clear()用于清理
.click() 用于点击

4.实现动作链

通过实例化ActionChains类可以实现动作链。

actions=ActionChains(browser)
actions.ddrap_and_drop(source,target)
actions.perform()

只简单介绍,更多的动作链操作可以参考官方文档:https://selenium-python.readthedocs.io/api.html#model-selenium.webdriver.common.action_chains

5.执行JS

执行js极大的增加了和页面的交流,比如下拉进度条:

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
6.获取节点信息

.get_attribute() 获取属性值
.text 获取文本信息
.id 获取id值
.location 获取位置
.tag_name 获取标签的name值
.size 获取大小

7.切换frame

browser.swith_to.frame()
browser.swith_to.parent_frame

8.延时等待

get(url)会在网页框架加载结束后结束,这时页面还没有完全加载完毕。要设置使其等待一段时间,有隐式等待(browser.implicitly_wait(10))和显式等待。
显式等待要引入WebDriverWait这个类。然后调用类的until方法,传入的参数是等待条件expected_conditions.那么同时也要

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import webDriverWait
wait=webDriverWait(broswer,10)  #类的实例化
button=wait.until(EC.element_to_be-clickable())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值