解析网页-selenium-非常实用-python爬虫知识点7

  • 优点:可以进行互动的操作,处理动态网页
  • 缺点:慢

一、引入

  • 爬虫和反爬虫的斗争在这里插入图片描述
  • selenium最初本来是用来测试网站的,但是爬虫人员将其引过来可以解决动态网页的问题

静态网页与ajax动态加载

  • 以前爬取的网页都是静态的网页
  • 何为静态网页,其实就是我们向一个网站发起请求得到响应,那么这些响应的数据都是网页的源代码中,通过response就可以得到数据
  • 除了静态网页,还有一些网站数数据不在这个请求得到url地址当中,那么这些护具有可能是通过ajax技术加载出来的数据,例如12306的班次的信息不在url中,查询的内容只是对网页的部分内容更新,这个就是ajax动态加载出来的
  • element是最终的显示结果,会经过渲染和多次请求,只能作为参考,只有源代码才是准确的,如果观察element的数据在网页源代码中没有,那就可能藏着其他文件里,动态加载出来的

ajax动态加载的数据怎么处理

  • 网页有我们要爬取的数据,但是网页的源码中没有,该如何解决
    • 1.分析真正的ajax真正的数据接口,找到接口的url。从而来获取数据
    • 2.通过selenium来模拟浏览器获取数据
      +chromedriver模拟浏览器行为获取数据

ajax基本介绍

  • 动态了解HTML技术
    • JS
      • 是网络上最常用的脚本语言,它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页
    • jQuery
      • jQuery是一个快速、简介的JavaScript框架,封装了JavaScript常用的功能代码
    • ajax
      • ajax可以使用网页实现异步更新,可以在不重新加载整个网页的情况下,对网页的某部分进行更新

二、配置Selenium、chromdriver

Selenium 介绍

  • selenium是一个web的自动化测试工具,最初是为网站自动化测试而开发的,selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏
    • 安装Selenium:pip install selenium, 安装教程
    • 要使用Selenium,还要下载浏览器驱动,第一次启用驱动要指定地址,或者将其安装在当前工作目录下

chromedriver

  • chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:
  • chromedriver 地址 http://chromedriver.storage.googleapis.com/index.html 选择和浏览器版本匹配的驱动器
  • firefoxdriver类似,火狐浏览器的驱动器

Phantomjs

  • 无头浏览器,不会打开页面,它是没有和用户交互界面的,一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器
  • 用途:
    • 1 有的程序是用的是它
    • 2 对比的去学习chromedriver
  • 区别:
    • Phantomjs可以通过截屏driver.save_screenshot(‘baidu.png’)来获取测试结果,不会和 chromedriver一样弹出浏览器窗口,动态看操作步骤。
    • Phantomjs对于Selenium是过时的程序,所以会报错警告

三、Selenium的基本操作

  • from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import Select
  • 当属性有空格的时候,定位的时候可能会找不到该元素,例如account-tab-account on 如何解决呢?
    • 1.可以选其中的一部分(通过测试)先选择长一点的尝试,去掉on
    • 2 xpath来定位
  • 注意:没有网的话用 selenium会报错

(一)设置驱动、退出驱动

driver = webdriver.Chrome(路径)
  • 路径:填的是chromedriver.exe的路径,如果当前工作文件夹有,可以不填
  • Chrome:这个是打开的是Chrome浏览器,也可以选择火狐webdriver.firefox()或无头浏览器webdriver.PhantomJS()

设置无界面模式

  • 设置了这个后就不会再弹出浏览器窗口了,可以截屏,但和不同无头浏览器不完全一样,无头浏览器截屏可以看到它是没有浏览器的,不会有拖动框。
# 创建chrome设置对象
options = webdriver.ChromeOptions()
# 设置无界面功能  --headless 浏览器无界面 --xxxx 
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.quit()
  • 退出驱动(关闭所有的窗口)

(二)网页打开、关闭等基本操作

1.打开网页、多个网页、切换窗口

打开网页

  • get(url)接连打开两个网页,后面会直接覆盖前面的

如何打开多个窗口呢?

  • driver.execute_script(‘window.open(“https://www.douban.com/”)’)
  • 但是当前工作环境,后面操作对象仍然是前面的窗口,要想在新的窗口进行操作的换,还需要主动的切换窗口
  • 有时候窗口中有很多子tab页面。这时候肯定是需要进行切换的。selenium提供了一个叫做switch_to_window来进行切换,具体切换到哪个页面,可以从driver.window_handles中找到

切换窗口

  • driver.switch_to.window(driver.window_handles[1]) 序号就是代指了网页的顺序索引,从0开始

显示当前窗口

  • driver.current_url
    在这里插入图片描述
2.关闭当前窗口

driver.close()

  • 关闭当前窗口,只会关闭一个,当前如果有多个窗口的话,只会关闭当前工作的窗口
  • 因为关闭的是当前工作的窗口,所以后面再继续操作都会报错,即使打开另一个窗口的操作也不行,这个时候就必须要切换还在的窗口,然后再进行下一个步骤
3.网页全屏与截屏

全屏

  • driver.maximize_window()

网页截屏

  • driver.save_screenshot(‘图片名.png’)`
  • 截取的是当前工作的网页

(三)定位元素

  • 通过定位元素,就可以在指定的位置操作元素

方法

  • element匹配第一个
    elements 匹配所有,返回列表
    • driver.find_element(By.某,对应某值)
      driver.find_elements(By.某,对应某值)
    • driver.find_element_by_ 某(对应某值)
      driver.find_elements_by_ 某(对应某值)
1.通过标签
  • driver.find_element_by_tag_name(‘标签名’)
    driver.find_elements_by_tag_name(‘标签名’)
  • 不够精确,不常用
2.通过属性值
  • id
    • driver.find_element_by_id(‘属性值’) 方法指定属性
      driver.find_elements_by_id(‘属性值’)
    • driver.find_element(By.ID,‘属性值’) 括号指定属性
      driver.find_element(By.ID,‘属性值’)
  • class(by_class_name用的是class_name)、name、link等属性同理
3.通过xpath
  • driver.find_element_by_xpath(xpath路径)
  • 可以直接复制某行的xpath的路径

(四)标签元素处理

1.获取文本text
  • tag.text
2.获取属性值get_attribute('属性')
  • tag.get_attribute(‘属性’)
3.获取文本输入框内容get_attribute('value')
  • InputTag.get_attribute(‘value’)

(五)操作元素

1.输入框-----传值send_key()与清空值clear()

send_key()传值

  • 第一步:找到这个元素input_tag,定位到的输入框标签位置。
    第二步:使用send_keys(value),将数据填充进去
    input_tag.send_keys(‘要传的值’)

clear()清空值

  • input_tag.clear()清空输入值
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
2.按钮-----click()点击
  • 操作按钮有很多种方式。比如单击、右击、双击等。这里讲一个最常用的。就是点击

click()点击

  • 第一步:找到这个元素button,定位到的按钮标签位置。
    第二步:使用.click()
    button.click()
    在这里插入图片描述
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋芋本人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值