11-selenium浏览器自动化

本文介绍了Selenium作为Web自动化框架的基本概念、安装方法,特别是与爬虫的关联,如方便获取动态数据和模拟登录。讲解了动作链Action Chains、无头浏览器的使用,并详细阐述了Selenium WebDriver的各种网页操作。同时,提到了使用XPath、CSS选择器等进行元素定位,以及处理页面嵌套frame的技巧。
摘要由CSDN通过智能技术生成

selenium

- 概念:

  • Selenium 是一个 Web 应用的自动化框架
  • 自动化:通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框中输入文字 等操作,还能从web界面获取信息。 比如获取12306票务信息,招聘网站职位信息,财经网站股票价格信息 ,以及滑动模块验证码滑动等等,然后用程序进行分析处理。
  • Selenium 的自动化原理
    在这里插入图片描述

- selenium的安装
- pip install selenium
- 安装浏览器驱动
- 浏览器驱动 是和 浏览器对应的,不同的浏览器 需要选择不同的浏览器驱动目前主流的浏览器中, Chrome 浏览器对Selenium自动化的支持更加成熟一些。
我们就以Chrome浏览器为例下载url如下:
- https://chromedriver.storage.googleapis.com/index.html
在这里插入图片描述

  • 比如:当前Chrome浏览器版本是72, 通常就需要下载72开头的目录里面的驱动程序 。- 注意:驱动和浏览器的版本号越接近越好,但是略有差别(比如72和73),通常也没有什么问题.
  • 比如,解压到 d:\webdrivers 目录下面,也就是保证我们的Chrome浏览器驱动路径为 d:\webdrivers\chromedriver.exe
# -*- coding: utf-8 -*-
from selenium import webdriver

# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')

# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com')

如果我们直接把驱动程序放到python安装目录下就不需要指定驱动路径了
在这里插入图片描述

在这里插入图片描述

selenium和爬虫之间的关联

1,便捷的捕获到任意形式的动态加载数据(可见即可得)

  • 2,实现模拟登录jd
    • 标签定位使用xpath表达式进行定位,也可使用css(根据id,class等进行定位)
      在这里插入图片描述
# -*- coding: utf-8 -*-
from selenium import webdriver


wd = webdriver.Chrome()# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd.get('https://www.jd.com')# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
search = wd.find_element_by_xpath('//*[@id="key"]') #定位到搜索框
search.send_keys('macbook pro') # 模拟输入搜索的内容
btn = wd.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()#模拟点击搜索按钮


在这里插入图片描述

在这里插入图片描述

# -*- coding: utf-8 -*-
from selenium import webdriver
import time

wd = webdriver.Chrome()# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd.get('https://www.jd.com')# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.implicitly_wait(5) #静默等待最大5秒,保证页面加载完毕
search = wd.find_element_by_xpath('//*[@id="key"]') #定位到搜索框
search.send_keys('macbook pro') # 模拟输入搜索的内容
btn = wd.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()#模拟点击搜索按钮
time.sleep(2)#等待2秒执行下面操作
#在搜索结果页面进行滚轮向下滑动的操作(执行js操作:js注入)
wd.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(2) #为了看见滑动效果我们可以等待2秒

wd.quit()#关闭浏览器

爬虫展示

3 使用selenium爬取jd商城数据(该案例翻页效果失败
- 仔细分析京东的页面后发现,京东的页面是分两段动态生成的,先显示一半的结果,当你下拉页面后,再显示后一半的结果
- 每次下拉一半时,都会生成一个新的s_new.php?..,同时请注意请求参数中的 page 数的变化情况
- 由此可以得出,网页中的一页,实际上是 2 个 page 组成的,那么出现这样的错误就可以解释了
- 当刚刚加载出页面时,此时页面中只有 page: 1,而整个页面框架也刚刚加载出来,所以此时的页面跳转模块在page:1的下面,而当selenium选择页面跳转模块时,页面就已经滚动到下方了,于是Ajax又动态加载了page: 2,页面因此发生了改变,所以原先选择的元素就失效了
-
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.common.keys import Keys # 键盘按键操作库
import time



# 1,模拟用户访问网址

def spider(url,keyword):
    driver = webdriver.Chrome()# 定义浏览器
    driver.get(url)
    driver.maximize_window()  # 窗口最大化
    driver.implicitly_wait
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值