python爬虫--selenium的理解以及使用(六)

文章目录

  • 前言
  • 一、selenium简介
  • 二、selenium处理iframe
  • 三、selenium的模拟登录
  • 四、无头浏览器和规避检测
    • 4.1 无可视化界面
    • 4.2 规避检测
  • 五、One-Two-Three-Zero-Six模拟登录
    • 5.1 步骤讲解
    • 5.2 源码
  • 总结

前言

  • 关于一个页面是否是动态加载(Aajax)数据的判断方法⭐⭐

动态加载数据意味着直接对网址进行请求是无法直接拿到页面数据的,我们可以通过网页上的抓包工具定位到network对网页进行请求,并查看网页上的某个数据是否在network请求页面加载的数据页中

  • 步骤详解
    python爬虫--selenium的理解以及使用(六)_第1张图片
    python爬虫--selenium的理解以及使用(六)_第2张图片
    python爬虫--selenium的理解以及使用(六)_第3张图片

动态加载的数据是如何来的?

python爬虫--selenium的理解以及使用(六)_第4张图片
python爬虫--selenium的理解以及使用(六)_第5张图片


一、selenium简介

selenium模块和爬虫之间具有怎样的关联

  • 便捷的获取网站中动态加载的数据
  • 边界的实现模拟登录

什么是selenium模块?

  • 基于浏览器自动化的一个模块

selenium模块使用流程:

  • 环境安装:pip install selenium
  • 下载一个浏览器的驱动程序:用什么浏览器就下载什么浏览器驱动程序:谷歌驱动程序
    对于现在正在使用的google浏览器根据版本号寻找对应驱动程序即可。
  • 实例化一个浏览器对象
  • 编写基于浏览器自动化的操作代码:
  1. 发起请求:get(url)
  2. 标签定位:find系列方法
  3. 标签交互:send_keys(‘xxx’)
  4. 执行js程序:execte_script(‘jsCode’)
  5. 关闭浏览器:quit()

python爬虫--selenium的理解以及使用(六)_第6张图片

  • 使用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()

python爬虫--selenium的理解以及使用(六)_第7张图片

  • 使用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标签: