Python爬虫之selenium的基础使用

这篇具有很好参考价值的文章主要介绍了Python爬虫之selenium的基础使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.本文背景及概要

笔者在Python爬虫的学习过程中接触selenium,惊觉此包的强大之处,便对学习的知识做个记录,方便日后需要时查看,同时也和读者分享。文中表述如有错误,敬请指正,感激不尽。

本文主要是对selenium的概要和一些基础的用法。特此说明:笔者学习的资料中selenium版本较旧,在使用途中有些方法和参数已发生改变,笔者将结合查询到的新方法和参数来叙述。

selenium版本:4.11.2

二.初始selenium

这里抛出两个问题:selenium和爬虫有什么关系?其一,大家知道,在我们爬取某些网页的时候,它的数据并不是静态的,而是通过动态加载出来的,如使用Ajax等。这时候我们如要爬取这些动态的数据就需要手动去抓包,这种操作不仅费时费力,而且还不一定能找到。这时候,就该selenium大显身手了。它可以便捷地获取到网站中动态加载的数据,用简洁的代码便可达到我们的要求。其二,我们还可以使用selenium轻松地实现模拟登录。说到这,那么selenium到底是什么?它是一个基于浏览器自动化的模块。

OK,让我们操作起来。首先去下载selenium

pip install selenium

然后去下载一个浏览器驱动器,我这里用edge作例。

查看到自己的edge的版本,我的是116.0.1938.54。接着去Microsoft Edge WebDriver - Microsoft Edge Developer下载对应自己版本的驱动器,如果没有一样的版本号就下载比自己浏览器前面一点点的驱动版本也可以。解压之后将其复制到我们项目目录中(这里只是一种方式,可以放很多地方,本文选择项目中)

 Python爬虫之selenium的基础使用,python,爬虫,selenium

现在所有的准备工作都已就绪,selenium,启动!!!

三.selenium的简单使用

 废话少说,直接上代码

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from time import sleep
# 无头浏览器
from selenium.webdriver.edge.options import Options
# 规避检测
from selenium.webdriver import EdgeOptions


# 为了运行不突兀(无头浏览器)
edge_options = Options()
edge_options.add_argument("--headless")
edge_options.add_argument("--disable-gpu")

# 为了不被网站检测出以致请求失败(规避检测)
option = EdgeOptions()
option.add_experimental_option("excludeSwitches", ["enable-automation"])

# 创建对象
s = Service("./msedgedriver.exe")
edge = webdriver.Edge(service=s, options=option)

# 发送请求
edge.get(url="https://qzone.qq.com/")

# 定位到子界面
edge.switch_to.frame("login_frame")

# 定位标签
a_tag = edge.find_element("id", "switcher_plogin")
a_tag.click()

sleep(1)

# 定位账号和密码标签
username_tag = edge.find_element("id", "u")
password_tag = edge.find_element("id", "p")

sleep(1)

# 输入账号和密码
username_tag.send_keys("******")
password_tag.send_keys("******")

sleep(1)

# 定位登录标签
sub_tag = edge.find_element("id", "login_button")
sub_tag.click()

sleep(10)

 接下来逐一讲解,前俩坨代码是为了实现无头浏览器和规避检测的。至于什么是无头浏览器,当你没有这串代码来执行程序,它就会弹出一个框来执行。但是有了这串代码,就会表现的像是打开了自己电脑上的浏览器来执行。说人话就是加了感觉丝滑一些,没那么突兀。而规避检测很好理解,一些网站有这种测试,一旦发现我们是selenium,直接闭门不见,让我们请求失败。而这串代码就是伪装我们的利器。各位要用时直接来这复制粘贴即可。

然后就该创建对象。这里创建对象和旧版不同,先是创建一个Service对象,里面给上我们放在项目里驱动器的路径。之后再创建浏览器对象,注意,这里你是什么浏览器就webdriver.xxx,这里以edge举例。里面参数service给刚刚创建的Service对象,如果写了规避代码就把options给创建的option。注意,导包的时候一定注意自己是什么浏览器,把浏览器换了。

往后走就是基本操作了,和requests有着异曲同工之妙的.get,当然要发送post请求就是.post。里面给上想要访问的地址。请求成功后,最基本的就是获取页面源码,在刚刚提到过,selenium可以便捷地获取页面的动态加载的数据,这里只需要edge.page_source就可以拿到页面源码,不用去考虑Ajax等繁琐的过程(代码中并未展现)。拿到页面源码后自然就可以去创建etree对象,去拿到我们想要的数据了。

上面的代码做的是模拟登录,故并没有去创建etree对象爬取数据。做模拟登录需要先定位到网页当中我们需要输入数据的标签,而一般登录页面需要我们输入账号密码的地方都是一个iframe子界面。所以这时就需要去定位到子界面,否则就会在定位标签的时候出错。

.switch_to.frame("login_frame")

而此方法就可以帮助我们成功定位子界面,里面的参数是页面源代码中iframe标签的id。

定位成功之后,就去抓包需要输入账号密码的标签

.find_element("id", "u")

这里使用此方法,两个参数分别是根据什么属性和属性是什么,比如这里就是根据id是u来定位这个标签。

成功定位到我们需要的标签就开始交互

.send_keys("******")

这个方法是往里面填数据,上面整个代码是模拟QQ空间登录,我自然是不可能把账号密码写出来故用******代替。填好账号密码后,再次如法炮制定位到提交的标签

.click()

然后使用此方法模拟点击,就登录成功了。

在此说明一点,代码中sleep函数只是为了程序执行起来效果更好,并无实际用处。

 文章来源地址https://www.toymoban.com/news/detail-729136.html

这里,再补充一些上面没提到但常用的一些基础用法。

如果你想在请求的页面执行一些js代码,可以使用

.excute_script("js代码")

来实现一些比如滑动页面等操作。

如果你想前进或者后退页面,可以使用

# 后退
.back()
# 前进
.forward()

新版本的selenium在执行完程序后会自动关闭浏览器,所以.quit()方法就不需要了。

 

四.动作链的使用

如果我们想让selenium模拟我们在浏览器上的一些点击拖拽操作,就需要用动作链来实现。

首先来导包

from selenium.webdriver import ActionChains

然后实例化一个动作链对象

action = ActionChains(edge)

这里的edge是已经发送请求后的浏览器对象了,这很好理解,如果连页面是什么都不知道怎么去进行操作呢?

这里进行一些简单的操作,比如我们想让鼠标点击长按一个东西,就需要先定位到这个东西的标签

div = edge.find_element("id", "xxx")

然后让动作链去操作

action.click_and_hold(div)

这样就长按且点击此标签了。然后便是拖动

action.move_by_offset(x, y).perform()

这里x是水平方向移动的距离,y是竖直方向移动的距离,单位都是像素(px)。.perform()方法是让动作链立即执行。

使用完动作链后,再通过

action.release()

来释放动作链对象。

 

五.通过selenium和pillow实现有验证码的登录

因为验证码每次刷新后都不一样,所以单纯通过获取验证码<img>标签中的src地址是不行的。会导致页面的验证码和我们访问src地址获取到的验证码不一致的情况。所以我们做如下方法考虑,对每一次访问的页面进行一次截图,然后再从这个整个页面截图中获取验证码的图片,之后再由专业解码平台返回需要输入的数据,最后登陆成功。

这里将主要方法展现。

获取当前页面截图并保存

edge.save_screenshot("name.png")

参数给你想取的名字,后缀给png或者jpg或者其他都行。

接着我们定位到验证码的标签赋给变量img_ele,之后得到验证码图片左上角的坐标

location = img_ele.location

再获取验证码标签对应的长和宽

# 宽
width = (img_ele.size)["width"]
# 高
height = (img_ele.size)["height"]

然后确定验证码图片左上角和右下角的坐标

rangle = (location["x"], location["y"], location["x"]+width, location["y"]+height)

使用pillow包来操作

创建Image对象

i = Image.open("./name.png")

开始裁剪

# crop根据指定区域进行图片裁剪
frame = i.crop(rangle)
frame.save("code.png")

裁剪下来的验证码图片保存为"code.png",同样,想取什么名字自己取。

之后便是提交验证码图片给平台,然后获取要输入的数据。这里不是本文重点故不展开叙述。注意:有些验证码是输入一些东西,而有些是点击一些图片。点击的操作可不要忘了动作链哟。

验证码输入正确之后就完成登录了。

 

到了这里,关于Python爬虫之selenium的基础使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫基础之Selenium详解

    原文地址: https://program-park.top/2023/10/16/reptile_3/ 本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。   Selenium 是一个用于 Web 应用程序测试的工具。最初是为网站自动化测试而开发的,可以直

    2024年02月07日
    浏览(36)
  • 【零基础入门Python爬虫】第三节 Python Selenium

    Python Selenium 是一种自动化测试框架,可以模拟用户在浏览器中的交互行为。它是一个基于浏览器驱动程序的工具,可用于Web应用程序测试、数据采集等方面,能够让开发人员通过代码自动化地模拟用户在浏览器中的操作,并获取到所需的数据。 Selenium的主要优势是它可以模拟

    2024年02月04日
    浏览(36)
  • 【Python爬虫】Python爬虫三大基础模块(urllib & BS4 & Selenium)

    参考资料 Python爬虫教程(从入门到精通) Python urllib | 菜鸟教程 Beautiful Soup 4 入门手册_w3cschool Selenium入门指南 Selenium教程 什么是 Scrapy|极客教程 Scrapy入门教程 1、网络爬虫是什么? 我们所熟悉的一系列 搜索引擎都是大型的网络爬虫 ,比如百度、搜狗、360浏览器、谷歌搜索等

    2024年02月12日
    浏览(35)
  • 【Python爬虫开发基础⑩】selenium概述

    🚀 个人主页 :为梦而生~ 关注我一起学习吧! 💡 专栏 :python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~ 💡 往期推荐 : ⭐️前面比较重要的 基础内容 : 【Python爬虫开发基础⑥】计算机网络基础(Web和HTTP) 【Python爬虫开发基础⑦】urllib库的基本使用

    2024年02月12日
    浏览(35)
  • 一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium

    大家好,我是python222小锋老师。前段时间卷了一套  Python3零基础7天入门实战  以及1小时掌握Python操作Mysql数据库之pymysql模块技术 近日锋哥又卷了一波课程,python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium,文字版+视频版。1天掌握。 视频版教程:一天掌握python爬虫【

    2024年02月07日
    浏览(34)
  • Python爬虫之selenium库使用详解

    什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。 selenium可以模拟真

    2023年04月19日
    浏览(71)
  • Python爬虫-使用Selenium模拟百度登录

        前面我已经安装好了Selenium并模拟成功了一下打开百度页面并进行查询,让我这个python初学者信心倍增,今天再来试一试百度登录 把打开百度的代码放到构造方法中 ps:那个文件目录是用于后面滑块验证图片保存的。 点击右上角的“登录”按钮,打开登录框, 代码如下:

    2024年02月06日
    浏览(41)
  • python爬虫selenium和ddddocr使用

    selenium实际上是web自动化测试工具,能够通过代码完全模拟人使用浏览器自动访问目标站点并操作来进行web测试。 通过python+selenium结合来实现爬虫十分巧妙。 由于是模拟人的点击来操作,所以实际上被反爬的概率将大大降低。 selenium能够执行页面上的js,对于js渲染的数据和

    2024年02月07日
    浏览(35)
  • 【Python爬虫】selenium的详细使用方法

    selenium是一个用于web应用测试的工具,selenium所做的测试会直接运行在浏览器中,就像真人进行操作一样,像是打开浏览器,输入账号密码登录等等。目前selenium支持大部分的浏览器,例如:IE,Mozilla Firefox,Safari,Google Chrome,Opera,Edge等等浏览器,selenium是一个相当成功的开

    2024年02月07日
    浏览(49)
  • python爬虫框架selenium安装和使用教程

    – Selenium是一个常用的Python爬虫框架,可以模拟浏览器行为,实现一些自动化的操作。本教程将介绍Selenium的基础知识、使用方法,包括导入包、安装、示例、数据保存等方面。 在开始之前,我们需要先导入Selenium相关的包。这里我们用Python3作为演示,所以需要安装对应版本

    2024年02月02日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包