第6章-selenium的使用+iframe+图形验证码

本文介绍了如何使用Python的Selenium库处理Ajax请求、在iframe中操作元素以及应对图形验证码。详细讲解了Selenium的基本用法,包括定位元素、操作表单、模拟用户行为,以及处理页面等待、切换窗口和图形验证码识别。同时,还涉及到了Ajax数据获取和PhantomJS的使用。
摘要由CSDN通过智能技术生成

一、ajax基本介绍

1、ajax

ajax可以使⽹⻚实现异步更新,在不重新加载整个⽹⻚的情况下,对⽹⻚的某部分进⾏更新
在这里插入图片描述
如上图:车次信息在网页源码中不存在,更换查询的“出发/目的地及日期”时,通过ajax技术不对整个网页进行加载,只对查询的车次进行更新

2、获取ajax数据的方式

(1)通过“检查-Network”直接分析ajax调⽤的数据接⼝,找到真实的URL,然后通过代码请求这个数据接⼝
在这里插入图片描述
(2)使⽤Selenium+chromedriver模拟浏览器⾏为获取数据
在这里插入图片描述

二、selenium

1、selenium介绍
  • selenium是⼀个web的⾃动化测试⼯具,最初是为⽹站⾃动化测试⽽开发的。selenium可以直接运⾏在浏览器上,它⽀持所有主流的浏览器,可以接收指令,让浏览器⾃动加载⻚⾯,获取需要的数据,甚⾄⻚⾯截屏。
  • chromedriver是⼀个驱动Chrome浏览器的驱动程序,使⽤它才可以驱动浏览器。当然针对不同的浏览器有不同的driver。
  • 浏览器驱动下载地址:(淘宝镜像)https://developer.aliyun.com/mirror/NPM?from=tnpm
  • 将驱动程序的可执行文件拷贝到python目录下
2、PhantomJS常用语法

PahantomJS:是一个⽆头浏览器,也就是不包括显示页面、⽤户交互⻚⾯的浏览器(⼀个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等)

from selenium import webdriver
# 1.加载网页驱动
driver = webdriver.PhantomJS()
# 2.打开网页
driver.get('http://www.baidu.com')
# 3.定位操作-搜索框
search = driver.find_element_by_id('kw')
# 4.输入关键字-搜索的内容
search.send_keys('pyhton')
# 5.点击搜索按钮"百度一下"
driver.find_element_by_id('su').click()
# 6.截屏
driver.save_screenshot('baidu.png')  # 只能匹配.png格式
# 7.查看源码
print(driver.page_source)  # 不带括号
# 8.查看当前请求的url
print(driver.current_url)  # 不带括号
3、selenium的使用
3.1快速入门
from selenium import webdriver
import time
driver = webdriver.Chrome()  # 加载chrome浏览器的驱动
driver.get('https://www.baidu.com')  # 通过selenium打开百度
time.sleep(3)  # 等待3秒钟
print(driver.current_url)  # 打印当前的url
driver.quit()  # 关闭浏览器的所有窗口
driver.close()  # 关闭当前窗口(只有一个窗口将同时关闭浏览器)

在这里插入图片描述

3.2定位元素

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意:

  • find_element 是获取第⼀个满⾜条件的元素, find_elements是获取所有满⾜条件的元素
  • find后面()中的字符串,绝不能出现空格(否则会报错),可以只写一部分字符串
3.3操作表单元素
3.3.1 针对input标签
  • send_keys(value):在输入框中填充数据
  • clear():清除输⼊框中的内容
  • click():鼠标单击功能
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
inputTag = driver.find_element_by_id('kw')  # 定位输入框
inputTag.send_keys('python')  # 输入数据
searTag = driver.find_element_by_id('su')   # 定位搜索按钮
searTag.click()  # 点击搜索
time.sleep(3)  # 等待3秒钟
inputTag.clear()  # 清空搜索框
driver.close()  # 关闭当前窗口
3.3.2 针对select标签(iframe)

select标签:不能直接点击,因为点击后还需要选中元素(如:下拉式菜单)。这时候selenium就专⻔为select标签提供了⼀个类-selenium.webdriver.support.ui.Select;将获取到的元素当成参数传到这个类中,创建对象,后续可使⽤这个对象进⾏选择。
在这里插入图片描述

iframe会嵌套页面的一些属性/元素(通过iframe中的另一个ip地址,嵌套整个页面或者页面的一部分,),如果要定位的元素存在于iframe中,那么直接在原始页面中去定位元素是定位不到的,需要切换到iframe中再去定位需要定位的元素。

from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome()
driver.get('https://www.17sucai.com/pins/demo-show?id=5926')
# 1.切换到iframe中
driver.switch_to_frame(driver.find_element_by_id('iframe'))  # 删除线表示此方法已过时,但还可以用
# 2.将获取到的元素当成参数传到类中创建对象
selectTag 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值