使用selenium模拟登陆淘宝、新浪和知乎
如果直接使用selenium访问淘宝、新浪和知乎这些网址。一般会识别出这是自动化测试工具,会有反制措施。
当开启开发者模式后,就可以绕过他们的检测啦。(不行的,哭笑) 如果网站只是对windows.navigator.webdriver进行检测。
绕过网站对webdriver的特征识别
1-使用splash,navigator.webdriver只适用使用webdriver的渲染工具,对splash这种使用webkit内核开发的渲染工具是无效的。
2-利用selenium或者其他渲染工具执行js使navigator.webdriver的返回值为false或undefined,比如在请求url后执行这句js
Object.defineProperty(navigator, "webdriver", {get: () => false,});
3-使用mitmdump改请求出去时的数据包。
几个站模拟登陆的套路都是差不多。
麻烦一点的是知乎,老是弹出验证码。这里不提验证码的绕过,真的有大量的登录获取cookie的需求。连接打码平台应该是个不错的选择... 其实用selenium操作浏览器时尽量模拟人的操作,就可以减少验证码出现的几率了。
直接上代码吧,注释里会说明逻辑:
淘宝(注意这个账号是淘宝绑定微博的账号):
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC URL = 'https://login.taobao.com/'
USER = ''
PASSWORD = ''
chrome_options = Options() #设置
#chrome_options.add_argument('--headless') #浏览器不提供可视化界面
chrome_options.add_argument('--disable-gpu') #规避bug # 设置开发者模式启动,该模式下webdriver属性为正常值 一般反爬比较好的网址都会根据这个反爬
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome(chrome_options=chrome_options) #配置设置
wait = WebDriverWait(driver, 10) #超时时长为10s
driver.get(URL) #请求网址 #选择密码登录
login_click = wait.until(EC.presence_of_element_located((By.XPATH, '//i[@class="iconfont static"]')))
login_click.click() #选择微博登录
weibo_click = wait.until(EC.presence_of_element_located((By.XPATH, '//a[@class="weibo-login"]')))
weibo_click.click() #等待微博账号输入框出现
weibo_user = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.username > .W_input')))
weibo_user.send_keys(USER) #等待微博密码输入框出现
weibo_pwd = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.password > .W_input')))
weibo_pwd.send_keys(PASSWORD) #等待登录按钮出现
submit = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.btn_tip > a > span')))
submit.click() #在搜索框中输入搜索关键字
search_input = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@id="q"]')))
search_input.send_keys('美食') #driver.close()
知乎:
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains import time URL = 'https://www.zhihu.com/signin'
USER = ''
PASSWORD = ''
chrome_options = Options() #设置
#chrome_options.add_argument('--headless') #浏览器不提供可视化界面
chrome_options.add_argument('--disable-gpu') #规避bug # 设置开发者模式启动,该模式下webdriver属性为正常值 一般反爬比较好的网址都会根据这个反爬
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome(chrome_options=chrome_options)
driver.maximize_window() #全屏打开浏览器
wait = WebDriverWait(driver, 10) #超时时长为10s driver.get(URL) #转到密码登录
change = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="SignFlow-tab"]')))
change.click()
# 等待知乎账号输入框出现
zhihu_user = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@name="username"]')))
zhihu_user.click()
time.sleep(1)
zhihu_user.send_keys(USER) # 等待知乎密码输入框出现
zhihu_pwd = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@name="password"]')))
zhihu_pwd.click()
zhihu_pwd.send_keys(PASSWORD) time.sleep(1.5)
#直接点击登录按钮
ActionChains(driver).move_by_offset(930, 500).click().perform() # 鼠标左键点击, 200为x坐标, 100为y坐标 #driver.close()
新浪微博:
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains import time URL = 'https://weibo.com'
USER = ''
PASSWORD = ''
chrome_options = Options() #设置
#chrome_options.add_argument('--headless') #浏览器不提供可视化界面
chrome_options.add_argument('--disable-gpu') #规避bug # 设置开发者模式启动,该模式下webdriver属性为正常值 一般反爬比较好的网址都会根据这个反爬
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome(chrome_options=chrome_options) #配置设置
driver.maximize_window() #全屏打开浏览器
wait = WebDriverWait(driver, 10) #超时时长为10s driver.get(URL) # 等待微博账号输入框出现
weibo_user = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@id="loginname"]')))
weibo_user.click() # 用来模拟手工点击一下再输入账号
time.sleep(0.5) # 延时一下,速度太快好像会导致验证码的出现
weibo_user.send_keys(USER) #输入账号 # 等待微博密码输入框出现
weibo_pwd = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="input_wrap"]/input[@name="password"]')))
weibo_pwd.send_keys(PASSWORD) # 直接按坐标点击登录按钮
ActionChains(driver).move_by_offset(1360, 280).click().perform() # 鼠标左键点击 #driver.close()
参考:https://www.cnblogs.com/zengxm/p/10963947.html
The end~
使用selenium模拟登陆淘宝、新浪和知乎的更多相关文章
- selenium模拟登陆淘宝
from selenium import webdriver import time from selenium.webdriver.common.by import By from selenium ...
- Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享 支付宝十年账单上的数字有点吓人,但它统计的项目太多,只是想看看到底单纯在淘宝上支出了多少,于是写了段脚本,统计任意时间段淘宝订单的消费情况,看 ...
- 淘宝(新浪)API获取IP地址位置信息
package com.parse; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IO ...
- selenium跳过webdriver检测并模拟登录淘宝
目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 模拟登录淘宝已经不是一件新鲜的事情了,过去我曾经使用get/post方式进行爬虫,同时也加入IP代理池进行跳过检验,但随着大型网 ...
- Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...
- Python爬虫实战五之模拟登录淘宝并获取所有订单
经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...
- Python 爬虫实战5 模拟登录淘宝并获取所有订单
经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 ...
- 利用Selenium爬取淘宝商品信息
一. Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...
- python3编写网络爬虫16-使用selenium 爬取淘宝商品信息
一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...
随机推荐
- MOOC(12) - 安装连接数据库的第三方库
1.连接数据库需要mysql-python驱动,可以官网下载离线安装包 安装 检查是否导入成功
- 3dmax2018卸载/安装失败/如何彻底卸载清除干净3dmax2018注册表和文件的方法
3dmax2018提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2018失败提示3dmax2018安装未完成,某些产品无法安装,也有时候想重新安装3 ...
- iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码
iOS精选源码 微信自定义搜索框实现 一个商城Demo,持续更新中 在Object-C中学习数据结构与算法之排序算法 iOS 音乐播放器之锁屏歌词+歌词解析+锁屏效果 XLsn0wPushTimePi ...
- 安装VSCODE和typora黑屏
工欲善其事必先利其器,本来是为了学git为了保存代码,然后网上一顿搜索研究之后发现,用git来保存笔记也不错,因为现在用的onenote搜索实在在在在是太不方便了,除了搜索不行,其他方面她还是很好的, ...
- JDK9新特性-改进进程管理 API
Java 9 这个版本对进程管理方面的改进也是相当大的.在为数不多的几次 Java 项目中,有偶尔用到多线程,但对多进程和进程方面的了解还真是太少. 我想,大部分人应该跟我一样,在编程之外知道有进程的 ...
- mudbox安装未完成,某些产品无法安装的解决方法
mudbox提示安装未完成,某些产品无法安装该怎样解决呢?,一些朋友在win7或者win10系统下安装mudbox失败提示mudbox安装未完成,某些产品无法安装,也有时候想重新安装mudbox的时候 ...
- Python之configparser配置文件的读取
配置文件名 config.ini 文件内容: [linux] ip:10.0.13.26 port:22 username:root password:W2ynE6b58wheeFho [mysql] ...
- Zabbix-3.0.3实现微信(WeChat)报警
转自:http://blog.sina.com.cn/s/blog_87113ac20102w7hp.html Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来 ...
- 猫头鹰的深夜翻译:核心JAVA并发一
简介 从创建以来,JAVA就支持核心的并发概念如线程和锁.这篇文章会帮助从事多线程编程的JAVA开发人员理解核心的并发概念以及如何使用它们. (博主将在其中加上自己的理解以及自己想出的例子作为补充) ...
- 将java project打包成jar包,web project 打包成war包的几种演示
将java项目打包成jar 第一种:MyEclipse将java项目打包成jar. 1,右击项目,选择export . 2,点击Java,选择JAR file . 3,在JAR file文本中浏览打包 ...