selenium跳过webdriver检测并模拟登录淘宝


Posted in Python onJune 12, 2019

简介

模拟登录淘宝已经不是一件新鲜的事情了,过去我曾经使用get/post方式进行爬虫,同时也加入IP代理池进行跳过检验,但随着大型网站的升级,采取该策略比较难实现了。因为你使用get/post方式进行爬取数据,会提示需要登录,而登录又是一大难题,需要滑动验证码验证。当你想使用IP代理池进行跳过检验时,发现登录时需要手机短信验证码验证,由此可以知道旧的全自动爬取数据对于大型网站比较困难了。

selenium是一款优秀的WEB自动化测试工具,所以现在采用selenium进行半自动化爬取数据,支持模拟登录淘宝和自动处理滑动验证码。

编写思路

由于现在大型网站对selenium工具进行检测,若检测到selenium,则判定为机器人,访问被拒绝。所以第一步是要防止被检测出为机器人,如何防止被检测到呢?当使用selenium进行自动化操作时,在chrome浏览器中的consloe中输入windows.navigator.webdriver会发现结果为Ture,而正常使用浏览器的时候该值为False。所以我们将windows.navigator.webdriver进行屏蔽。

在代码中添加:

options = webdriver.ChromeOptions()
  # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
  options.add_experimental_option('excludeSwitches', ['enable-automation']) 
  self.browser = webdriver.Chrome(executable_path=chromedriver_path, options=options)

同时,为了加快爬取速度,我们将浏览器模式设置为不加载图片,在代码中添加:

options = webdriver.ChromeOptions()
  # 不加载图片,加快访问速度
  options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})

至此,关键的步骤我们已经懂了,剩下的就是编写代码的事情了。在给定的例子中,需要你对html、css有一定了解。
比如存在以下代码:

self.browser.find_element_by_xpath('//*[@class="btn_tip"]/a/span').click()
  taobao_name = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.site-nav-bd > ul.site-nav-bd-l > li#J_SiteNavLogin > div.site-nav-menu-hd > div.site-nav-user > a.site-nav-login-info-nick ')))
  print(taobao_name.text)

第1行代码指的是从根目录(//)开始寻找任意(*)一个class名为btn_tip的元素,并找到btn_tip的子元素a标签中的子元素span

第2行代码指的是等待某个CSS元素出现,否则代码停留在这里一直检测。以.开头的在CSS中表示类名(class),以#开头的在CSS中表示ID名(id)。A > B,指的是A的子元素B。所以这行代码可以理解为寻找A的子元素B的子元素C的子元素D的子元素E出现,否则一直在这里检测。

第3行代码指的是打印某个元素的文本内容

使用教程

点击这里下载下载chrome浏览器

查看chrome浏览器的版本号,点击这里下载对应版本号的chromedriver驱动

pip安装下列包

[x] pip install selenium

点击这里登录微博,并通过微博绑定淘宝账号密码

在main中填写chromedriver的绝对路径

在main中填写微博账号密码

#改成你的chromedriver的完整路径地址
 chromedriver_path = "/Users/bird/Desktop/chromedriver.exe" 
 #改成你的微博账号
 weibo_username = "改成你的微博账号"
 #改成你的微博密码
 weibo_password = "改成你的微博密码"

演示图片

selenium跳过webdriver检测并模拟登录淘宝

源代码

项目源代码在GitHub仓库

项目持续更新,欢迎您star本项目

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木

Python 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
python模拟Django框架实例
May 17 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
Python3实现二叉树的最大深度
Sep 30 Python
python读取Kafka实例
Dec 23 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
用python进行视频剪辑
Nov 02 Python
Python如何使用循环结构和分支结构
Apr 13 Python
python3.4 将16进制转成字符串的实例
Jun 12 #Python
python binascii 进制转换实例
Jun 12 #Python
Python3 实现串口两进程同时读写
Jun 12 #Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 #Python
python实战串口助手_解决8串口多个发送的问题
Jun 12 #Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 #Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 #Python
You might like
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
Angular2库初探
2017/03/01 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python实现最长公共子序列
2018/05/22 Python
python逆序打印各位数字的方法
2018/06/25 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
党员自我剖析材料
2014/08/31 职场文书
信用卡工作证明模板
2014/09/14 职场文书
创业计划书之宠物店
2019/09/19 职场文书