python selenium爬虫自动登录实例

news2024/11/25 8:19:23

拷贝地址:python selenium爬虫自动登录实例_python selenium登录_Ustiniano的博客-CSDN博客

一、概述

我们要先安装selenium这个库,使用pip install selenium 命令安装,selenium这个库相当于机器模仿人的行为去点击浏览器上的元素,这时我们要用到一个浏览器的驱动(这里我用的是谷歌浏览器)。
二、安装驱动
确认浏览器版本

首先我们先要查看自己浏览器的版本,谷歌浏览器的话点右上角三个点--帮助--关于 Chrome

我们会看到自己的浏览器版本,可以看到我的浏览器版本为100.0.4896.127(正式版本)

下载驱动

打开网页 :CNPM Binaries Mirror

找到100.0.4896.127,后面的小版本号虽然和我的浏览器有些差异,可以忽略。只要保证大版本是一样即可。

 点击进去,找到windows版。注意:windows版只有32位,没有64位。

下载完后,解压后里面有个chromedriver.exe文件 

获取自己python安装的目录

打开cmd,输入where python可以查看python安装的路径,一般是下面这个(如果找不到目录记得打开计算机文件隐藏项目)

将解压后的chromedriver.exe文件复制到python安装目录下

三、 分析网页

打开某宝官网,点击登录,按f12查看网页源码,定位到账号输入框、密码输入框和登录按钮复制它们的xpath 。

返回官网首页,同样的方法复制搜索框和搜索按钮的xpath,这里比如我输入电脑

 接下来分析网页获取商品信息 ,这里我就放在代码里面了。
四、代码

代码这里我使用了一个滑块验证的方法,滑块验证不一定会成功也可以自己手动滑一下。

   

 import time
    import csv
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver import ChromeOptions, ActionChains
     
     
    # 定义爬取单页的函数
    def get_page(web):
        divs = web.find_elements_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div')
        # print(divs)
        for div in divs:
            info = div.find_element_by_xpath('./div[2]/div[2]/a').text  # 商品名称
            price = div.find_element_by_xpath('./div[2]/div[1]/div[1]/strong').text + '元'  # 商品价格
            deal = div.find_element_by_xpath('./div[2]/div[1]/div[2]').text  # 商品付款人数
            name = div.find_element_by_xpath('./div[2]/div[3]/div[1]/a/span[2]').text  # 商家店名
            print(info, price, deal, name, sep="|")
            try:
                csvwriter.writerow([info, price, deal, name])
            except :
                pass
     
     
    option = ChromeOptions()
    # 设置为开发者模式,防止被各大网站识别出来使用了Selenium
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    option.add_argument("--disable-blink-features")
    option.add_argument("--disable-blink-features=AutomationControlled")
    # 初始化一个web对象
    web = webdriver.Chrome(options=option)
    # 进入淘宝官网
    web.get('https://www.taobao.com/')
    # 点击登录
    web.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()
    # 输入账号密码
    web.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys('你的手机号')
    web.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys('你的密码')
    # 点击登录
    web.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()
    time.sleep(2)
    # 搜索商品并回车
    web.find_element_by_xpath('//*[@id="q"]').send_keys('电脑', Keys.ENTER)
    time.sleep(3)
    #  验证淘宝滑块,在前三秒也可以手动滑块,因为不确保自动滑块能成功
    try:
        yz = web.find_element_by_xpath('//*[@id="baxia-punish"]/div[2]/div/div[1]/div[2]/div/p').text
        if yz == '通过验证以确保正常访问':
            while 1:
                # 获取滑块的大小
                span_background = web.find_element_by_xpath('//*[@id="nc_1__scale_text"]/span')
                span_background_size = span_background.size
                # print(span_background_size)
                # 获取滑块的位置
                button = web.find_element_by_xpath('//*[@id="nc_1_n1z"]')
                button_location = button.location
                # print(button_location)
                # 拖动操作:drag_and_drop_by_offset
                # 将滑块的位置由初始位置,右移一个滑动条长度(即为x坐标在滑块位置基础上,加上滑动条的长度,y坐标保持滑块的坐标位置)
                x_location = span_background_size["width"]
                y_location = button_location["y"]
                # print(x_location, y_location)
                action = ActionChains(web)
                source = web.find_element_by_xpath('//*[@id="nc_1_n1z"]')
                action.click_and_hold(source).perform()
                action.move_by_offset(x_location, 0)
                action.release().perform()
                time.sleep(1)
                try:
                    web.find_element_by_xpath('//*[@id="`nc_1_refresh1`"]').click()
                    time.sleep(3)
                except:
                    pass
    except:
        with open('taobao.csv', mode='a', newline='', encoding='gbk') as fp:
            csvwriter = csv.writer(fp, delimiter=',')
            csvwriter.writerow(['info', 'price', 'deal', 'name'])
        Allpage = 3
        count = 0
        while count < Allpage:
            count += 1
            print('-------------------正在爬取第%d页---------------------' % count)
            get_page(web)
            web.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/ul/li[8]/a/span[1]').click()
            print('------------------------')
            time.sleep(5)
     
        web.close()
        web.quit()

最好不要用自己的账号过多的爬取,可能会封号。
 

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

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

相关文章

24 ==比较的是地址在.equals比较的是内容

public class Demo1 {public static void main(String[] args) {byte[] arr {97,98,99};String s1 new String(arr);String s2 new String(arr);System.out.println(s1s2);System.out.println(s1.equals(s2));} }

pgvector 源码分析

简介 pgvector 库是一种用于计算向量距离的库&#xff0c;它的核心是提供了聚类索引&#xff0c;棸类索引使用的算法是 kmeans&#xff08;相对于 kmeans 最主要的区别是初始化起点的位置&#xff09;。 pgvector 索引的存储结构 meta page → list page → entry page inse…

vue2和vue3关于class类的绑定以及style的绑定的区别

本篇为个人笔记 1.对于class类的绑定的区别 vue2:对于vue2而言&#xff0c;所有类的绑定都是基于对象{}来进行的 例如&#xff1a;单个类绑定 <div :class"{active:isActive}"></div> 多个类绑定&#xff1a; <div :class"{active,hasError…

CNN(卷积神经网络)的实现过程详解

概要 在图像处理领域&#xff0c;CNN(卷积神经网络)处于绝对统治地位&#xff0c;但对于CNN具体是如何用神经网络实现的&#xff0c;能找到的介绍要么是一大堆数学公式&#xff0c;要么是大段晦涩的文字说明&#xff0c;读起来很是辛苦&#xff0c;想写好一片完整的而且有深度的…

【java安全】RMI

文章目录 【java安全】RMI前言RMI的组成RMI实现Server0x01 编写一个远程接口0x02 实现该远程接口0x03 Registry注册远程对象 Client 小疑问RMI攻击 【java安全】RMI 前言 RMI全称为&#xff1a;Remote Method Invocation 远程方法调用&#xff0c;是java独立的一种机制。 RM…

软件检测报告CMA/CNAS标识加盖和不加盖的区别在哪?

在生活中&#xff0c;我们经常会听到CMA(中国计量认证)和CNAS(中国合格评定国家认可委员会)这两个标识&#xff0c;尤其在软件检测领域更是如此。那么&#xff0c;软件检测报告CMA/CNAS标识加盖和不加盖有哪些区别呢CMA和CNAS认可的软件测评机构又有什么样的好处呢?本文将为您…

各电商平台api接口开发系列(数据分享)接口封装高并发

淘宝API接口就是第三方公司&#xff0c;通过淘宝开放平台接入淘宝数据&#xff0c;并进行再开发&#xff0c;将功能封装打包成函数&#xff0c;客户只需要传入参数&#xff0c;接收返回值就可以实现具体功能&#xff0c;其他1688&#xff0c;京东&#xff0c;拼多多以及海外跨境…

[Android 13]Input系列--触摸事件在应用进程的分发和处理

hongxi.zhu 2023-7-21 Android 13 前面我们已经梳理了input事件在native层的传递&#xff0c;这一篇我们接着探索input事件在应用中的传递与处理&#xff0c;我们将按键事件和触摸事件分开梳理&#xff0c;这一篇就只涉及触摸事件。 一、事件的接收 从前面的篇幅我们知道&…

STM32CubeMX v6.9.0 BUG:FLASH_LATENCY设置错误导致初始化失败

背景 今天在调试外设功能时&#xff0c;发现设置了使用外部时钟之后程序运行异常&#xff0c;进行追踪调试并与先前可以正常运行的项目进行对比之后发现这个问题可能是由于新版本的STM32CubeMX配置生成代码时的BUG引起的。 测试环境 MCU: STM32H750VBT6 STM32CubeIDE: Versi…

Android 屏幕适配各种宽高比的手机

由于android 手机的屏幕宽高比样式太多了&#xff0c;在设计UI时&#xff0c;很多时候&#xff0c;会因为宽高比&#xff0c;分辨率不同会有展示上的差异。 我是这样解决的 在activity的onCreate方法前&#xff0c;调用&#xff1a; fun screenFit(context: Context) {val me…

Gitee 上传项目到仓库(上传文件夹)

一、将仓库下载到本地 1.首先打开仓库&#xff0c;点击下载压缩包 2.将下载的压缩包解压&#xff0c;并打开&#xff0c;在当前目录下打开 二、git操作 1.在文件当前目录打开git bash 2.初始化git git init 该命令会生成一个隐藏的.git文件夹 如果不是第一次使用&#…

自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配&#xff0c;用于找到与查询语句最相似的文本。NLP中的文本匹配是指通过计算文本之间的相似度来找到与查询语句最相似的文本。其中一种常用的方法是基于文本…

MybatisPlus使用排序查询时,将null值放到最后

1用户需求 查询结果&#xff0c;按照某些字段进行排序&#xff0c;将为null的值放到最后。按照更新时间排序&#xff0c;但是更新时间可能为null&#xff0c;因此将null的数据放到最后。 2解决方案 最简单的方式&#xff0c;当然是下面这种直接在SQL最后面 NULLS LAST &…

FAPI,2471983-20-5,放射性示踪剂成纤维细胞激活蛋白抑制剂显像剂

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 一、产品描述&#xff1a; 成纤维细胞激活蛋白抑制剂显像剂FAPI&#xff08;CAS号&#xff1a;2471983-20-5&#xff09;&#xff0c;FAPI是一种放射性示踪剂&#xff0c;全称为成纤维细胞活化蛋白抑制剂。为小分子酶活性抑…

elasticsearch操作(API方式)

说明&#xff1a;es操作索引库、文档&#xff0c;除了使用它们自带的命令外&#xff08;参考&#xff1a;http://t.csdn.cn/4zpmi&#xff09;&#xff0c;在IDEA中可以添加相关的依赖&#xff0c;使用对应的API来操作。 准备工作 搭建一个SpringBoot项目&#xff0c;DAO使用…

为什么 Linux 内核协议栈会丢弃 SYN 数据包

最近了解到 SYN 数据包丢弃的问题&#xff0c;网上有一些资料&#xff0c;这里记录分享一下。 serverfault上的重要信息 tcp - No SYN-ACK Packet from server - Server Fault 信息如下&#xff1a; My embedded system with LwIP is the client and I have server1 and ser…

微信小程序开发,小程序类目符合,线上版本无权限申请wx.getLocation接口

我开发 的小程序类目符合wx.getLocation接口的申请标准 但是却还是显示无权限申请 后来研究好久才发现&#xff0c;小程序需要在发布线上版本时提交用户隐私保护指引 如未设置也可以在 设置-服务内容声明-用户隐私保护指引-声明处理用户信息项并补充填写后提交用户隐私协议审核…

MURF20100CTR-ASEMI快恢复对管封装、尺寸、参数

编辑&#xff1a;ll MURF20100CTR-ASEMI快恢复对管封装、尺寸、参数 型号&#xff1a;MURF20100CTR 品牌&#xff1a;ASEMI 芯片个数&#xff1a;2 芯片尺寸&#xff1a;102MIL*2 封装&#xff1a;TO-220F 恢复时间&#xff1a;50ns 工作温度&#xff1a;-50C~150C 浪…

k8s集群环境的搭建

1.环境规划 1.1 集群类型 Kubernetes集群大致分为两类&#xff1a;一主多从和多主多从。 一主多从&#xff1a;一个Master节点和多台Node节点&#xff0c;搭建简单&#xff0c;但是有单机故障风险&#xff0c;适合用于测试环境。 多主多从&#xff1a;多台Master和多台Node节点…

CMU 15-445 -- Two Phase Locking - 14

CMU 15-445 -- Two Phase Locking - 14 引言Lock TypesTwo-Phase LockingDeadlock Detection & PreventionDeadlock DetectionDeadlock PreventionHierarchical Lockingintention locks加锁协议 锁升级最佳实践显式加锁的相关SQL语句小结 引言 本系列为 CMU 15-445 Fall 2…