python selenium爬虫自动登录实例

拷贝地址: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 timeimport csvfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom 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 :passoption = ChromeOptions()# 设置为开发者模式,防止被各大网站识别出来使用了Seleniumoption.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').textif 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:passexcept:with open('taobao.csv', mode='a', newline='', encoding='gbk') as fp:csvwriter = csv.writer(fp, delimiter=',')csvwriter.writerow(['info', 'price', 'deal', 'name'])Allpage = 3count = 0while count < Allpage:count += 1print('-------------------正在爬取第%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.mzph.cn/news/11922.shtml

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

相关文章

uni-app:setTimeout函数(延迟时间之后执行)

下面的代码表示在 500 毫秒&#xff08;即0.5秒&#xff09;之后&#xff0c;会执行你在函数中编写的代码。你可以将需要执行的代码放在注释部分的位置。 setTimeout(function() {// 在这里写要执行的代码 }, 500); 例如&#xff1a; 在经过 500 毫秒后&#xff0c;控制台会…

Android ANR触发机制之Service ANR

一、前言 在Service组件StartService()方式启动流程分析文章中&#xff0c;针对Context#startService()启动Service流程分析了源码&#xff0c;其实关于Service启动还有一个比较重要的点是Service启动的ANR&#xff0c;因为因为线上出现了上百例的"executing service &quo…

R-并行计算

本文介绍在计算机多核上通过parallel包进行并行计算。 并行计算运算步骤&#xff1a; 加载并行计算包&#xff0c;如library(parallel)。创建几个“workers”,通常一个workers一个核&#xff08;core&#xff09;&#xff1b;这些workers什么都不知道&#xff0c;它们的全局环…

c++学习(位图)[22]

位图 位图&#xff08;Bitmap&#xff09;是一种数据结构&#xff0c;用于表示一个固定范围的布尔值&#xff08;通常是0或1&#xff09;。它使用一个二进制位来表示一个布尔值&#xff0c;其中每个位的值表示对应位置的元素是否存在或满足某种条件。 位图可以用于解决一些特…

1.8 函数的连续性与间断点(二)

&#x1f64c;作者简介&#xff1a;数学与计算机科学学院出身、在职高校高等数学专任教师&#xff0c;分享学习经验、生活、 努力成为像代码一样有逻辑的人&#xff01; &#x1f319;个人主页&#xff1a;阿芒的主页 ⭐ 高等数学专栏介绍&#xff1a;本专栏系统地梳理高等数学…

利用MATLAB制作DEM山体阴影

在地理绘图中&#xff0c;我们使用的DEM数据添加山体阴影使得绘制的图件显得更加的美观。 GIS中使用ArcGIS软件就可以达到这一目的&#xff0c;或者使用GMT&#xff0c;同样可以得到山体阴影的效果。 本文提供了一个MATLAB的函数&#xff0c;可以得到山体阴影。 clear all;c…

C#中窗体之间的传值操作(传递值和获取返回值)

在C#的应用程序开发中&#xff0c;窗体之间的传值操作是不可避免会经常遇到的操作。   比如&#xff0c;在一个窗体中调用另外一个窗体、传递值并且得到返回值&#xff0c;通常情况下有哪些方法呢&#xff1f;   一般情况下&#xff0c;通过工程项目的公有变量、窗体的公有…

React 中 ref 如何使用?

在React 中要使用 ref &#xff0c;首先要创建一个新的对象 // 创建 ref 对象于jsx 绑定const inputRer useRef(null);在使用 ref 时不要在组件渲染时使用 ref 进行 dom 操作&#xff0c;因为此时ref 还没有值&#xff0c;会报错 &#xff08;注意&#xff1a;操作文本框时尽…

AI面试官:LINQ和Lambda表达式(二)

AI面试官&#xff1a;LINQ和Lambda表达式&#xff08;二&#xff09; 当面试官面对C#中关于LINQ和Lambda表达式的面试题时&#xff0c;通常会涉及这两个主题的基本概念、用法、实际应用以及与其他相关技术的对比等。以下是一些可能的面试题目&#xff0c;附带简要解答和相关案…

解放Linux内存:释放缓存(linux释放缓存)

随着软件越来越复杂&#xff0c;内存变得越来越宝贵。尤其是在Linux系统上&#xff0c;内存管理策略十分重要。它不仅可以帮助系统保持高效运行&#xff0c;而且也能够让程序有更多的空间来运行&#xff0c;避免系统出现假死和其他性能问题。 在Linux系统中&#xff0c;释放缓…

《面试1v1》如何能从Kafka得到准确的信息

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比…

基于粒子群优化算法的分布式电源选址与定容【多目标优化】【IEEE33节点】(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.1 目标函数 2.2 约束条件 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 分布式电源接入配电网&#xff0c;实现就地消纳&#xff0c;可以提高新能源的利用率、提高电能质量和降低系统网损…

网络渗透入门指南

目录 简介&#xff1a; 1. 什么是网络渗透&#xff1f; 2. 渗透测试类型 1.黑盒测试 2.白盒测试 3.灰盒测试 3. 渗透测试步骤 3.1 信息收集 3.2 漏洞扫描与评估 3.3 漏洞利用 3.4 特权升级与持久性访问 3.5 横向移动 3.6 数据获取与报告 实例&#xff1a; 总结 简…

ResponseEntity

ResponseEntity : 是 spring framework中的一个类&#xff0c;用于封装 http响应的实体部分&#xff0c;包含&#xff0c;主题内容&#xff0c;http响应头&#xff0c;http状态码&#xff0c;等信息&#xff0c;&#xff0c; 用来返回相应给客户端 HttpStatus 是个枚举类&…

出海周报|Temu在美状告shein、ChatGPT安卓版上线、小红书回应闪退

工程机械产业“出海”成绩喜人&#xff0c;山东相关企业全国最多Temu在美状告shein&#xff0c;跨境电商战事升级TikTok将在美国推出电子商务计划&#xff0c;售卖中国商品高德即将上线国际图服务&#xff0c;初期即可覆盖全球超200个国家和地区ChatGPT安卓版正式上线&#xff…

echarts遇到的问题

文章目录 折线图-区域面积图 areaStyley轴只有整数y轴不从0开始y轴数值不确定&#xff0c;有大有小&#xff0c;需要动态处理折线-显示label标线legend的格式化和默认选中状态x轴的lable超长处理x轴的相关设置 echarts各个场景遇到的问题 折线图-区域面积图 areaStyle areaStyl…

node.js的优点

提示&#xff1a;node.js的优点 文章目录 一、什么是node.js二、node.js的特性 一、什么是node.js 提示&#xff1a;什么是node.js? Node.js发布于2009年5月&#xff0c;由Ryan Dahl开发&#xff0c;是一个基于ChromeV8引擎的JavaScript运行环境&#xff0c;使用了一个事件驱…

Redis 场景

1.分布式锁实现 上锁&#xff1a;setnx key value 解锁&#xff1a;del key 超时机制&#xff1a;set key value nx ex time 基于此思路实现伪代码&#xff1a; public class RedisLock{Autowiredprivate static RedisTemplate rt; private static final LOCK_WORD &quo…

【c语言进阶】字符函数和字符串函数知识总结

字符函数和字符串函数 前期背景求字符串长度函数strlen函数strlen函数三种模拟实现 长度不受限制的字符串函数strcpy函数strcpy函数模拟实现strcat函数strcat函数模拟实现strcmp函数strcmp函数模拟实现 长度受限制的字符串函数strncpy函数strncpy函数模拟实现strncat函数strnca…