当前位置: 首页 > news >正文

浏览器自动化测试工具selenium——爬虫操作记录

selenium——是一款web自动化测试框架,其能模拟正常的用户操作,比如点击。但selenium并不是浏览器,没有执行js和解析html/css的能力,因此selenium需要和浏览器配合使用。

因为selenium可以模仿用户行为,因此selenium也常被用来作为爬虫解决方案。原因是随着技术的发展,网站技术变得越来越复杂,特别是动态网站技术,使用了多种反爬技术,比如请求头限制,ip限制,代码混淆,加密,接口验证等。

通过js逆向等逆向工程使得爬虫变得越来越困难,技术难度大;因此selenium配合浏览器就是一个好的选择,不管网站使用多少技术,我模拟用户的正常浏览操作行为总可以把,这样就可以直接绕过各种混淆,逆向等反爬技术。

但selenium既然是模仿正常用户的操作,那他就无法绕过一部分验证,那就是验证码或者其它客户端验证方式。

因此selenium也并不是完美的。

selenium使用起来很简单,但如果用来做爬虫需要一定的前后端开发经验,否则直接做爬虫会非常的困难。

初始化代码如下:

# python 代码
# 引入selenium包
from selenium.webdriver import Chrome# 创建一个浏览器对象, url为要爬取的网站地址
driver = webdriver.Chrome(options=opt)
driver.get("url")

driver发起请求之后,就可以获取到网页代码,和真实用户操作的结果没有什么不同;然后selenium就可以通过xpath,正则表达式等方式获取到页面节点。然后模拟用户操作,比如点击,输入用户,密码等。

# 通过xpath语法,通过class或id等从网页中提取节点,
btn = driver.find_element(By.XPATH, '//*[@class="douyin-login__close" or contains(@class,"dy-account-close")]')# 模拟用户点击
btn.click()

因此,selenium开发爬虫的难点不是技术问题,是经验问题,比如怎么通过xpath提到到目标节点。

最难的一点就是各种验证码,比如看图识字,输入验证数字等;最坑的就是一些滑块验证,有时会监听鼠标移动路径,但selenimu只是模拟用户点击没有办法监听鼠标移动,因此这种验证码没有什么好办法绕过。

所以,面对这种网站,最好的方式就是跳过前端页面,直接爬取其接口;但后端接口也会使用大量的反爬技术,比如用户身份验证,权限验证,加解密等。

总之,爬虫是一门技术和经验并重的工作,重要的是结果,不是过程;不论你用什么办法能拿到你想要的数据,那就是一个好的爬虫工程师,千万不要钻牛角尖。

当然,在最后提醒一下,爬虫技术是一门徘徊在法律边缘的技术,虽然法律没有禁止爬虫的存在,但如果用来爬取别人的私密数据,或者重要的企业数据,然后给企业造成损失,那么就有可能吃皇家饭。

因此,可以学习爬虫技术,但要注意爬虫技术的使用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 每天一个数据分析题(四百五十八)- 根因分析
  • 基于SpringBoot+Vue的热门网游推荐网站(带1w+文档)
  • 使用requests库进行网络爬虫:入门指南
  • upload-labs靶场(1-19关)
  • TongHttpServer 简介
  • 美团后端二面
  • Docker容器下面home assistant忘记账号密码怎么重置?
  • LINUX -exec函数族
  • npm提示 certificate has expired 证书已过期 已解决
  • Wi-Fi、WLAN、Bluetooth、zigbee、蜂窝网络、4g5g、MQTT
  • 355_C++_自动维护时间点计算,以天、小时(00:00-02:00、02:00-04:00 ......)来计算
  • [数据结构] AVL树 模拟实现AVL树
  • Kafka的入门及简单使用
  • Cocos Creator2D游戏开发(4)-飞机大战(2)-编辑器界面
  • 【扒模块】DFF
  • avalon2.2的VM生成过程
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CentOS 7 防火墙操作
  • ES6 ...操作符
  • Git 使用集
  • Golang-长连接-状态推送
  • mongodb--安装和初步使用教程
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Spring-boot 启动时碰到的错误
  • springMvc学习笔记(2)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何设计一个微型分布式架构?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 正则学习笔记
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #FPGA(基础知识)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (C语言)fgets与fputs函数详解
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二)斐波那契Fabonacci函数
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (转)linux下的时间函数使用
  • (转)负载均衡,回话保持,cookie
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *2 echo、printf、mkdir命令的应用
  • .htaccess 强制https 单独排除某个目录