一个例子带你入门影刀编码版(一)

news2024/11/27 22:42:29

文章结构

  • 摘要
  • 需求分析
  • 伪代码编写
  • 代码实现
  • 完整代码
  • 相关链接

摘要

将通过一个电商业务场景下的真实需求,带领大家零基础入门影刀编码版,本系列将会分三步讲解,从接到需求到最后完成发版,整个过程中我们需要做些什么?带你们走一个完整开发流程。

需求分析

需求说明:需要获取指定商家的所有在售商品的详细信息,并解析详情页信息。

需求拆解:
如下图所示,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

伪代码编写

如上图,需要登录才会显示商品
结合上文影刀自动化采集底层逻辑
的采集基础流程,先和浏览器建立交互,登录淘宝,逐个采集每个商品信息
在这里插入图片描述
伪代码如下

打开网页
登录淘宝
抓取总页数
for 循环 页数:
	抓取每一页信息
	{
	# 抓取每一页信息需要实现
	抓取标题、到手价、优惠活动信息,宝贝参数等
	}

代码实现

在这里插入图片描述

先使用影刀实现浏览器的交互,打开网页,登录淘宝

# 第一步 影刀中与浏览器建立联系的三种方法,具体参数定义可以参考函数解释,重点参数mode:选择浏览器,默认影刀浏览器
# 三种不同用法的区别
# 主要功能一致:通过与指定浏览器建立链接返回窗口句柄给影刀,赋值webBrowser,后面所有基于网页的操作都要通过这个网页对象webBrowser
# 不同的是
# create:创建,需要给出url,通过在浏览器中新打开一个窗口指向url地址
# get:通过窗口标题获取符合标题的窗口,不会执行打开跳转,需要提前手动打开
# get_active:获取当前激活的窗口句柄,即你切换进影刀之前的鼠标所在窗口
webBrowser = xbot.web.create("www.taobao.com",mode="chrome")
# webBrowser = xbot.web.get("淘宝",mode="chrome")
 # webBrowser = xbot.web.get_active(mode="chrome")
# 看个人习惯,以及应用场景,常用create,这里我们选择create

在这里插入图片描述

    webBrowser = xbot.web.create("www.taobao.com",mode="chrome")
    # webBrowser = xbot.web.get("淘宝",mode="chrome")
    # webBrowser = xbot.web.get_active(mode="chrome")

# 与网页建立交互的方式如下图,都在xbot -> web ->WebElement下,具体方法可以查看说明
# 我个人比较常用的就是find_by_xpath (找一个元素) --》对应的find_all_by_xpath(找符合条件的所有元素)
# 这里说明一下:影刀与Python的区别,selenium支持找一个(默认第一个)影刀不支持,会报错,如果用find_by_xpath,必须保证限定条件下只能找到一个
# 这里用find_all_by_xpath 主要是分析网页发现,登录前和登录后这个element是存在与不存在的关系
# 所以通过能不能找到来判断你是否登录了
    user_name_elements = webBrowser.find_all_by_xpath('//div[@class="site-nav-user"]/a',timeout=3)
    if not  len(user_name_elements):
		# 通过提示框阻断程序继续执行,手动登录后再继续,关于提示框会有很多类型,参考官方APi
		# API路径在 xbot ->app ->dialog 
        xbot.app.dialog.show_message_box("提示","请先登录您的个人淘宝账号")
        user_name_elements = webBrowser.find_all_by_xpath('//div[@class="site-nav-user"]/a')
    # 这里是上一节提到的获取完网页对象后对网页对象的操作,获取网页元素的文本属性
    user_name = user_name_elements[0].get_text()
    # print(user_name)
    return True

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

完整代码

# 今天的讲解就先到这里了,第一部分登录模块已经实现了
# 后面继续每个模块的实现
def login_info():
    webBrowser = xbot.web.create("www.taobao.com",mode="chrome")
    user_name_elements = webBrowser.find_all_by_xpath('//div[@class="site-nav-user"]/a',timeout=3)
    if not  len(user_name_elements):
        xbot.app.dialog.show_message_box("提示","请先登录您的个人淘宝账号")
        user_name_elements = webBrowser.find_all_by_xpath('//div[@class="site-nav-user"]/a')
    user_name = user_name_elements[0].get_text()
    return True

相关链接

【1】.影刀自动化采集底层逻辑
【2】.一个例子带你入门影刀编码版(二)
【3】.一个例子带你入门影刀编码版(三)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网页设计中增强现实的兴起

目录 了解增强现实 增强现实的历史背景 AR 和网页设计的交叉点 AR 在网页设计中的优势 增强参与度和互动性 个性化的用户体验 竞争优势和品牌差异化 AR 在网页设计中的用例 结论 近年来,增强现实已成为一股变革力量,重塑了我们与数字领域互动的方式。它被…

2023北京智慧城市与电气高峰论坛-安科瑞 蒋静

2023年7月27日,北京土木建筑学会电气设计委员会、北京电气设计技术协作及情报交流网联合举办的“北京电气设计第43届年会”在京盛大召开。安科瑞作为企业微电网能效管理平台服务商与广大同仁共聚本次盛会,尽享技术盛宴。 本次会议采用线上线下相结合&…

Spring JDBC和事务管理

Spring JDBC是Spring框架用来处理关系型数据库的模块&#xff0c;对JDBC的API进行了封装。 Spring JDBC的核心类为JdbcTemplate&#xff0c;提供数据CRUD方法 Spring JDBC使用步骤 Maven工程引入依赖spring-jdbc <dependency><groupId>org.springframework<…

logstash插件简单介绍

logstash插件 输入插件(input) Input&#xff1a;输入插件。 Input plugins | Logstash Reference [8.11] | Elastic 所有输入插件都支持的配置选项 SettingInput typeRequiredDefaultDescriptionadd_fieldhashNo{}添加一个字段到一个事件codeccodecNoplain用于输入数据的…

代码随想录二刷 |二叉树 | 二叉树的右视图

代码随想录二刷 &#xff5c;二叉树 &#xff5c; 二叉树的右视图 题目描述解题思路代码实现 题目描述 199.二叉树的右视图 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例…

【vtkWidgetRepresentation】第八期 vtkImplicitCylinderRepresentation

很高兴在雪易的CSDN遇见你 前言 本文分享vtkImplicitCylinderRepresentation&#xff0c;主要从源码解析、和实际应用方面展开&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xff01; …

基于PLC的电梯控制系统(论文+源码)

1.系统设计 电梯采用了PLC控制方式&#xff0c;通过对PLC进行逻辑程序设计&#xff0c;电梯不仅在控制水平上得到了质的提升&#xff0c;同时在安全性上也得到了大大提高。控制系统在构造上实现了简洁化&#xff0c;不仅优化了硬件接线方便了线路施工&#xff0c;同时对控制要…

Java设计模式分类

java的设计模式大体上分为三大类&#xff1a; 创建型模式&#xff08;5种&#xff09;&#xff1a;工厂方法模式&#xff0c;抽象工厂模式&#xff0c;单例模式&#xff0c;建造者模式&#xff0c;原型模式。 结构型模式&#xff08;7种&#xff09;&#xff1a;适配器模式&am…

51单片机的内核架构组成 介绍

对于51单片机相信很多电子信息或者相关专业的朋友应该都不会感觉陌生&#xff0c;很多专业在大学课程中开设的单片机课程就是使用的51单片机进行授课和学习的。51单片机的内容相较于其他高性能复杂的单片机来说&#xff0c;架构相对简单一些&#xff0c;寄存器也少很多&#xf…

【FMCW毫米波雷达设计 】 — FMCW波形

原书&#xff1a;FMCW Radar Design 1 引言 本章研究驱动FMCW雷达的主要波形:线性调频(LFM)波形。我们研究信号的行为及其性质。随后&#xff0c;本章讨论了匹配滤波理论&#xff0c;并研究了压缩这种波形的技术&#xff0c;特别是所谓的拉伸处理&#xff0c;它赋予FMCW雷达极…

【STM32】电机驱动

一、电机分类 二、直流电机的分类 1.有刷电机 2.无刷电机 3.直流减速电机 三、H桥电路 正向旋转 驱动Q1和Q4 反向旋转 驱动Q2和Q3 四、MC3386电机驱动芯片 1.基本原理图 1&#xff09;前进/后退&#xff1a;IN1和IN2的电平顺序决定电机的正反转 2&#xff09;调节速度&#…

深入了解对象与内置构造函数

1. 深入对象 1.1 创建对象的三种方式 1.2 构造函数 语法约定&#xff1a; 总结 构造函数可以快速创建多个对象大写字母开头的函数使用new关键字将对象实例化构造函数不需要返回值自动返回新的对象 new实例化的执行过程 创建空对象this指向对象执行代码&#xff0c;追加新…

AX和A(T)X的区别是?

目录 1.快速了解的例子&#xff1a; &#xff08;1&#xff09;假设所有节点的初始特征都是[1, 0, 0] &#xff0c;那么AX的结果是&#xff1a; &#xff08;2&#xff09; 的结果是&#xff1a; (3) 总结&#xff1a; 2.计算结构系数的例子 &#xff08;1&#xff09…

Spring IoC和DI

目录 一. Spring是什么 IoC DI 二. IoC&DI的使用 IoC 1.Controller&#xff08;控制器存储&#xff09; 2.Service&#xff08;服务存储&#xff09; 3.Repository&#xff08;仓库存储&#xff09; 4.Componemt&#xff08;组件存储&#xff09; 5.Configuratio…

【网络安全】网络设备可能面临哪些攻击?

网络设备通常是网络基础设施的核心&#xff0c;并控制着整个网络的通信和安全&#xff0c;同样面临着各种各样的攻击威胁。 对网络设备的攻击一旦成功&#xff0c;并进行暴力破坏&#xff0c;将会导致网络服务不可用&#xff0c;且可以对网络流量进行控制&#xff0c;利用被攻陷…

找不到WMVCORE.dll怎么办?一键解决WMVCORE.dll缺失的详细方法分享

当打开软件时提示wmvcore.dll丢失&#xff0c;这可能是由于以下几个原因导致的&#xff1a; 系统文件损坏&#xff1a;wmvcore.dll是系统文件&#xff0c;可能会因为各种原因&#xff08;如病毒感染、系统错误、软件卸载等&#xff09;而损坏。 软件依赖问题&#xff1a;某些…

Nginx性能调优实战 1

Nginx性能调优实战指南 1 Nginx作为一款高性能的Web服务器和反向代理服务器&#xff0c;在处理大量请求和并发连接时表现出色。然而&#xff0c;在实际应用中&#xff0c;为了更好地适应不同的负载和提高系统性能&#xff0c;进行Nginx性能调优是至关重要的。深入探讨Nginx性能…

mysql数据库文件丢失恢复---惜分飞

客户服务器重启,mysql相关数据文件丢失 通过底层工具进行分析,无法正确恢复数据库名字,一个个单个ibd文件(而且很多本身是错误的) 对于这种情况,通过mysql block扫描恢复出来page文件 恢复出来客户需要数据 这个客户出现该故障的原因大概率是由于文件系统损坏导致.最终…

SSD基础架构与NAND IO并发问题探讨

在我们的日常生活中&#xff0c;我们经常会遇到一些“快如闪电”的事物&#xff1a;比如那场突如其来的雨、那个突然出现在你眼前的前任、还有就是今天我们要聊的——固态硬盘&#xff08;SSD&#xff09;。 如果你是一个技术宅&#xff0c;或者对速度有着近乎偏执的追求&…

程序的机器代码表示--函数调用

call和ret指令 如何访问栈帧、如何切换栈帧、如何传递参数和返回值 call、ret指令作用&#xff1a; call&#xff1a;1&#xff09;将IP&#xff08;即PC&#xff09;旧值压栈保存&#xff08;保存在函数的栈帧顶部&#xff09;&#xff1b;2&#xff09;设置IP新值&#xff0…