用DrissionPage过某里滑块分析

最近我又在找工作了,悲哀啊~,面试官给了一道题,要求如下:

爬虫机试:https://detail.1688.com/offer/643272204627.html 过该链接的滑动验证码,拿到正确的商品信息页html,提取出商品维度的信息,输出json

由于时间紧迫,想着去破解加密参数x5sec估计时间也不够,最后采用自动化工具先应付一下面试,毕竟能不能入职还是未知数。

言归正传,先看效果图如下:
在这里插入图片描述
众所周知阿里的滑块检测是比较多的,常规的自动化工具无法过滑块。所有这次尝试用DrissionPage去破解。

DrissionPage文档地址如下:

https://www.drissionpage.cn/

每次运行代码后都会启动一个全新的浏览器,防止浏览器缓存被检测

from DrissionPage import ChromiumPage, ChromiumOptionsco = ChromiumOptions()
co.auto_port()
page = ChromiumPage(co)

通过监听数据包的方式获取数据

self.page.listen.start('https://detail.1688.com/all')

自定义滑块轨迹,这点还是比较重要的,模拟的越像人工轨迹越不会被检测。

def slide(self):"""滑动代码:return:"""ele = self.page.wait.eles_loaded("x://span[contains(@id,'nc_1_n1z')]", timeout=20)if ele:ele = self.page.ele("#nc_1_n1t")time.sleep(3)ele.hover()self.page.actions.hold('#nc_1_n1z')self.page.actions.move(100, duration=random.random())self.page.actions.move(100, duration=random.random())self.page.actions.move(59, duration=3)

报错捕获,目前发现当抓取的数据超过一定量后,必然会触发封控机制,这时候就需要换IP处理。

 if self.page.wait.eles_loaded("#recyclerview"):print('过滑动成功')elif self.page.wait.eles_loaded("#nc_1_refresh1"):print('滑动失败')# 需要继续处理.......elif self.page.wait.eles_loaded("#login-form"):print('需要登陆/换IP')# 需要继续处理.......

完整代码如下:

from DrissionPage import ChromiumPage, ChromiumOptions
import json
import time
import re
import random
import datetimeclass Detail(object):def __init__(self):co = ChromiumOptions()co.auto_port()self.page = ChromiumPage(co)self.page.listen.start('https://detail.1688.com/offer/643272204627.html')def slide(self):"""滑动代码:return:"""ele = self.page.wait.eles_loaded("x://span[contains(@id,'nc_1_n1z')]", timeout=20)if ele:ele = self.page.ele("#nc_1_n1t")time.sleep(3)ele.hover()self.page.actions.hold('#nc_1_n1z')self.page.actions.move(100, duration=random.random())self.page.actions.move(100, duration=random.random())self.page.actions.move(59, duration=3)def request_body(self):url = 'https://detail.1688.com/offer/643272204627.html'self.page.get(url)res = self.page.listen.wait()pattern = r'window\.__INIT_DATA\s*=\s*(\{.*?\})\s*</script>'match = re.search(pattern, res.response.body)try:json_data = match.group(1)dict_data = json.loads(json_data)temp_model = dict_data.get('globalData').get('tempModel')print(datetime.datetime.now())print(temp_model)except Exception as e:print(e)self.slide()if self.page.wait.eles_loaded("#recyclerview"):print('过滑动成功')elif self.page.wait.eles_loaded("#nc_1_refresh1"):print('滑动失败')# 需要继续处理.......elif self.page.wait.eles_loaded("#login-form"):print('需要登陆/换IP')# 需要继续处理.......def run(self):for i in range(1, 100000):self.request_body()if __name__ == '__main__':detail = Detail()detail.run()

最后总结一下,代码是半成品,想要实现完美的抓取阿里1688数据

  • 第一需要完成IP代理模块;
  • 第二完善报错机制;
  • 第三优化滑块轨迹逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/379503.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7月18日学习打卡,数据结构堆

hello大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有不…

SpringMVC的底层工作原理?

1.用户发送请求至前端控制器DispatcherServlet. 2.DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器 3.HandlerMapping找到具体的处理器(可以根据 xml 配置、注解进行查找&#xff09;&#xff0c;生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherSe…

B2BUA介绍

B2BUA介绍 B2BUA&#xff08;Back-to-Back User Agent&#xff0c;背靠背用户代理&#xff09;是通讯网络中&#xff0c;使用SIP&#xff08;Session Initiation Protocol&#xff0c;会话发起协议&#xff09;实现会话的一种逻辑实体。B2BUA作为SIP呼叫两端的用户代理&#xf…

Spring MVC-什么是Spring MVC?

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 文章目录 1.MVC定义2. Spring MVC 官方对于Spring Web MVC的描述这样的: Spring Web MVC is the original web framework built on the Servlet APl and has been includedin the Spring Frame…

科技论文在线--适合练习期刊写作和快速发表科技成果论文投稿网站

中国科技论文在线这个平台可以作为练手的一个渠道&#xff0c;至少可以锻炼一下中文写作&#xff0c;或者写一些科研方向的简单综述性文章。当然&#xff0c;如果你的老师期末要求也是交一份科技论文在线的刊载证明的话&#xff0c;这篇文章可以给你提供一些经验。 中国科技论…

PyCharm软件初始化配置

安装完pycharm后&#xff0c;需要对其进行个性化设置&#xff0c;分别设置方法如下 目录 一、修改主题二、修改默认字体和大小三、设置拖动滚轮改变字体大小四、常见快捷键 一、修改主题 1、界面右上角点击红框的内容 2、选择Theme选项 3、选择对应的主题 第一二个是白色主题…

Java中的JDK、JRE、JVM

JDK&#xff08;Java Development kit&#xff09;&#xff1a;Java开发工具包 JVM&#xff08;Java Virtual Machine&#xff09;&#xff1a;Java虚拟机&#xff0c;真正运行Java程序的地方 核心类库&#xff1a;Java已经写好的东西&#xff0c;可以直接用 开发工具&#xff…

RK3568平台(环境篇)windon与ubuntu之间文件互传

一.windon与ubuntu共享文件夹 打开设置&#xff1a; 点击选项&#xff0c;共享文件夹 共享文件夹&#xff0c;就是在电脑的固定盘符下面&#xff0c;找一个文件夹为Windows和Linux都能看得见的共用的看得见的文件夹&#xff0c;点击添加文件夹。 点击确定后在ubuntu添加共享文…

【Linux】Linux环境设置环境变量操作步骤

Linux环境设置环境变量操作步骤 在一些开发过程中本地调试经常需要依赖环境变量的参数&#xff0c;但是怎么设置对小白来说有点困难&#xff0c;今天就介绍下具体的操作步骤&#xff0c;跟着实战去学习&#xff0c;更好的检验自己的技术水平&#xff0c;做技术还是那句话&…

Java 网络编程(TCP编程 和 UDP编程)

1. Java 网络编程&#xff08;TCP编程 和 UDP编程&#xff09; 文章目录 1. Java 网络编程&#xff08;TCP编程 和 UDP编程&#xff09;2. 网络编程的概念3. IP 地址3.1 IP地址相关的&#xff1a;域名与DNS 4. 端口号&#xff08;port&#xff09;5. 通信协议5.1 通信协议相关的…

memcached 高性能内存对象缓存

memcached 高性能内存对象缓存 memcache是一款开源的高性能分布式内存对象缓存系统&#xff0c;常用于做大型动态web服务器的中间件缓存。 mamcached做web服务的中间缓存示意图 当web服务器接收到请求需要处理动态页面元素时&#xff0c;通常要去数据库调用数据&#xff0c;但…

Adobe国际认证详解-影视后期

在当今的数字媒体时代&#xff0c;影视后期制作作为创意产业的核心环节&#xff0c;对于专业技能的要求日益提高。Adobe国际认证&#xff0c;作为全球创意设计领域的重要标杆&#xff0c;为影视后期制作人员提供了一个展示自我、提升技能的国际舞台。 何为影视后期&#xff1f;…

Bean的注解开发

目录 注解定义bean 在实现类使用注解Component 注意Spring提供了Component注解的三个衍生注解 纯注解开发 bean管理 bean的作用范围 bean的生命周期 bean的依赖注入 引用类型的注入 如果有两个实现类呢&#xff08;即有两个相同变量类型的bean&#xff09;&#xff0c…

maven内网依赖包编译报错问题的一种解决方法

背景 外网开发时可以连接互联网&#xff0c;所以编译没有什么问题&#xff0c;但是将数据库、代码、maven仓库全部拷贝到内网&#xff0c;搭建内网环境之后&#xff0c;编译失败。 此依赖包的依赖层级图 maven镜像库配置使用拷贝到内网的本地库&#xff0c;配置如下&#xff…

从操作系统层面认识Linux

描述进程-PCB Linux操作系统下的PCB是: task_struct https://www.cnblogs.com/tongyan2/p/5544887.htmlhttps://www.cnblogs.com/tongyan2/p/5544887.html校招必背操作系统面试题-什么是 PCB&#xff08;进程控制块&#xff09; &#xff1f;_哔哩哔哩_bilibili校招必背操作系…

FOG Project 文件名命令注入漏洞复现(CVE-2024-39914)

0x01 产品简介 FOG是一个开源的计算机镜像解决方案,旨在帮助管理员轻松地部署、维护和克隆大量计算机。FOG Project 提供了一套功能强大的工具,使用户能够快速部署操作系统、软件和配置设置到多台计算机上,从而节省时间和精力。该项目支持基于网络的 PXE 启动、镜像创建和还…

应用层——HTTP

像我们电脑和手机使用的应用软件就是在应用层写的&#xff0c;当我们的数据需要传输的时候换将数据传递到传输层。 应用层专门给用户提供应用功能&#xff0c;比如HTTP,FTP… 我们程序员写的一个个解决我们实际的问题都在应用层&#xff0c;我们今天来聊一聊HTTP。 协议 协议…

配置SMTP服务器的要点是什么?有哪些限制?

配置SMTP服务器安全性如何保障&#xff1f;如何高效配置服务器&#xff1f; SMTP作为电子邮件发送的核心协议&#xff0c;其配置对于确保邮件的成功传递和安全至关重要。AokSend将详细介绍配置SMTP服务器的关键要点&#xff0c;帮助读者建立一个高效、安全的邮件发送系统。 配…

【BUG】已解决:note: This is an issue with the package mentioned above,not pip.

已解决&#xff1a;note: This is an issue with the package mentioned above&#xff0c;not pip. 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷…

【LabVIEW作业篇 - 3】:数组相加、for循环创建二位数组、数组练习(求最大最小值、平均值、中位数、提取范围内的数据、排序)

文章目录 数组相加for循环实现直接使用加函数 for循环创建二位数组数组练习 数组相加 要求&#xff1a;用两种方法实现两个数组相加 for循环实现 在前面板中分别创建两个数值类型的一维数组&#xff0c;并设置相应的值&#xff0c;然后在程序框图中创建一个for循环&#xff…