使用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 ...
随机推荐
- es 查询分词字段为空的数据
{ "query": { "bool" : { "filter" : { "script" : { "scri ...
- dim|lobby|trifle|
ADJ-GRADED 勉强的;不情愿的If you are reluctant to do something, you are unwilling to do it and hesitate bef ...
- 前端之css引入方式/长度及颜色单位/常用样式
1.css三种引入方式 <!DOCTYPE html><html><head> <meta charset="UTF-8"> < ...
- OpenCV 输入输出XML和YAML文件
#include <opencv2/core/core.hpp> #include <iostream> #include <string> using names ...
- orcale 11g安装,创建表空间,用户,授权用户
一.卸载旧oracle 用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下: 1. 开始->设 ...
- mysql 存储过程与存储函数
第一节:存储过程和函数的引入 存储过程和函数是在数据库中定义一些SQL 语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL 语句.存储过程和函数可以避免开发人员重复的编写相同的SQL ...
- CAD卸载/完美解决安装失败/如何彻底卸载清除干净cad各种残留注册表和文件的方法
在卸载cad重装CAD时发现安装失败,提示是已安装或安装失败.这是因为上一次卸载后没有清理干净,系统会误认为已经安装过了.有的同学是新装的系统也会出现安装失败的情况,这是因为C++ 或者.NET的原因 ...
- python开发时小问题之端口占用
昨天开发时遇到个小问题: 在使用pycharm编写tornado代码时: 直接用这种方式开启了服务,当我想修改代码时发现端口已经被占用代码提交不上去 所以现在该关闭进程: 步骤一: 打开CMD 步骤二 ...
- Java捕获并处理线程失败抛出的异常
使用 UncaughtExceptionHandler 示例代码如下: Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExc ...
- 题解 HDU 3698 Let the light guide us Dp + 线段树优化
http://acm.hdu.edu.cn/showproblem.php?pid=3698 Let the light guide us Time Limit: 5000/2000 MS (Java ...