文章目录
前言
- 关于一个页面是否是动态加载(Aajax)数据的判断方法⭐⭐
动态加载数据意味着直接对网址进行请求是无法直接拿到页面数据的,我们可以通过网页上的抓包工具定位到network对网页进行请求,并查看网页上的某个数据是否在network请求页面加载的数据页中
- 步骤详解
动态加载的数据是如何来的?
一、selenium简介
selenium模块和爬虫之间具有怎样的关联?
- 便捷的获取网站中动态加载的数据
- 边界的实现模拟登录
什么是selenium模块?
- 基于
浏览器自动化
的一个模块
selenium模块使用流程:
- 环境安装:
pip install selenium
⭐- 下载一个浏览器的驱动程序:用什么浏览器就下载什么浏览器驱动程序:谷歌驱动程序
对于现在正在使用的google浏览器根据版本号寻找对应驱动程序即可。- 实例化一个浏览器对象
- 编写基于浏览器自动化的操作代码:
- 发起请求:get(url)
- 标签定位:find系列方法
- 标签交互:send_keys(‘xxx’)
- 执行js程序:execte_script(‘jsCode’)
- 关闭浏览器:quit()
- 使用selenium爬取药监总局的数据⭐
from selenium import webdriver
from lxml import etree
from time import sleep
# 实例化一个浏览器对象(传入浏览器的驱动程序)
bro = webdriver.Chrome(executable_path='E:\Google\chromedriver')
# 让浏览器发起一个指定的url对应请求
bro.get('http://scxk.nmpa.gov.cn:81/xk/')
# 获取浏览器当前的页面源码数据
page_text = bro.page_source
# 解析企业名称
tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="gzlist"]/li')
for li in li_list:
name = li.xpath('./dl/@title')[0]
print(name)
sleep(5)
# 关闭浏览器
bro.quit()
- 使用selenium进行简单的自动化操作
from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path=r'E:\Google\chromedriver')
bro.get('https://www.taobao.com/')
# 找到搜索框:标签定位
search_input = bro.find_element_by_id('q') # 返回所定位的标签
# 标签的交互
search_input.send_keys('Iphone')
# 执行一组js程序 :滚轮滚动一个屏幕的高度
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
# 点击搜索按钮 class = 'btn-search tb-bg'
btn = bro.find_element_by_css_selector('.btn-search')
# btn = bro.find_element_by_class_name('btn-search')
btn = bro.find_element_by_class_name('tb-bg')
btn.click()
bro.get('https://www.baidu.com')
sleep(2)
# 回退
bro.back()
sleep(2)
# 前进
bro.forward()
sleep(5)
bro.quit()
二、selenium处理iframe
- 如果定位的标签是存在iframe标签之中的则必须使用switch_to.frame(id)
- 动作链(拖动):
from selenium.webdriver import ActionChains
# 动作链
- 实例化动作链对象:
action = ActionChains(bro)
action.click_and_hold(div)
:长按并点击
move_by_offset(x,y)
:想要偏移的像素值
action.move_by_offset(17,yoffset=0).perform()
:让动作链立即执行
action.release()
释放动作链对象
- iframe
iframe就是我们常用的iframe标签:<iframe>。iframe标签是框架的一种形式,也比较常用到,iframe一般用来包含别的页面,例如我们可以在我们自己的网站页面加载别人网站或者本站其他页面的内容。
iframe标签的最大作用就是让页面变得美观。
iframe标签的用法有很多,主要区别在于对iframe标签定义的形式不同,例如定义iframe的长宽高。
- 使用selenium实现如下操作