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下载对应自己版本的驱动器,如果没有一样的版本号就下载比自己浏览器前面一点点的驱动版本也可以。解压之后将其复制到我们项目目录中(这里只是一种方式,可以放很多地方,本文选择项目中)

 selenium 4.11 简单使用,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-762960.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爬虫01】Selenium简单认识

    在现代的Web开发中,自动化测试是不可或缺的一环。而Selenium是一个强大的Python库,用于自动化Web浏览器的操作和测试。本篇博文将为您介绍Selenium的基础知识和使用方法,并通过案例说明如何进行Web自动化测试。 Selenium是一个开源的自动化测试框架,主要用于模拟用户与We

    2024年02月16日
    浏览(41)
  • 4.11 Pandas中的DataFrame数据类型API函数参考手册(一) (Python)

    前言 Pandas 是一个专门用于数据处理和分析的 Python 库,它提供了众多强大的数据结构和函数,帮助用户更加轻松、高效地完成数据处理和分析任务。其中,DataFrame 数据类型是 Pandas 中非常重要的一种数据结构,可以方便地对二维表格数据进行操作、处理、统计和可视化等工作

    2024年02月10日
    浏览(47)
  • Python爬虫:Selenium的介绍及简单示例

    Selenium是一个用于自动化Web应用程序测试的开源工具。它允许开发人员模拟用户在浏览器中的交互行为,以便自动执行各种测试任务,包括功能测试、性能测试和回归测试等。Selenium最初是为Web应用程序测试而创建的,但它也可用于Web数据抓取和其他自动化任务。 以下是关于

    2024年02月09日
    浏览(39)
  • Python爬虫基础之Selenium详解_python selenium

    from selenium import webdriver from selenium.webdriver.common.by import By browser= webdriver.Chrome() url = ‘https://www.baidu.com’ browser.get(url) button = browser.find_element(By.ID, ‘su’) print(button) button = browser.find_element(By.NAME, ‘wd’) print(button) button = browser.find_element(By.XPATH, ‘//input[@id=“su”]’) print(button)

    2024年04月15日
    浏览(52)
  • Python爬虫基础之 Selenium

    1.1什么是Selenium? Selenium是一个浏览器自动化测试框架,是一款用于Web应用程序测试的工具。框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度

    2024年01月23日
    浏览(43)
  • Selenium 4.11 正式发布--再也不用手动更新chrome driver 了

    Selenium 4.11.0 正式发布了,先来看一下主要特性。 Chrome DevTools支持的版本现在是:v113、v114和v115(Firefox仍然对所有版本使用v85) 通过Selenium Manager支持Chrome For Testing(CfT) Selenium Manager现在可以在PATH或配置的路径上定位driver的二进制文件,检查潜在的不兼容性,并提供更好的

    2024年02月08日
    浏览(48)
  • Python爬虫基础之Selenium详解

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

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

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

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

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

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

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

    2024年02月12日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包