关键词:selenium,python,淘宝,反爬虫,cookies
一、阿里这种公司“反爬虫技术”业界一流,如下代码通过selenium完成淘宝登录,出现滑块。
from selenium import webdriver
import json
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
#淘宝反爬虫技术演示代码
driver=webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.taobao.com")
driver.maximize_window()#最大化
#进入到登录页面
driver.find_element_by_css_selector(".site-nav-sign a").click()
#默认扫码页面,切换至密码登录页面
driver.find_element_by_css_selector(".iconfont.static").click()
#输入账号 密码
ac=ActionChains(driver)
ele=driver.find_element_by_css_selector(".username-field span")
ac.click(ele).send_keys("账号\n").perform()#输入账号回车,跳转到密码输入框
ele=driver.find_element_by_css_selector(".pwd-field input")
ele.send_keys("密码")
time.sleep(3)
driver.find_element_by_id("J_SubmitStatic").click()
input("...")
driver.quit()
也许有人会问 可以通过代码完成滑块的滑动,但是目前淘宝的策略:只要检测到selenium打开的网站,就无法通过。
网上有方案:
1)把chrome设置为开发者模式再去滑动;
2)或者使用第三方账号登录,如微博;
3)或者使用扫码登录。本文以扫码方案拓展介绍。
参考网址:https://github.com/stormdony/python_demo/tree/master/TaoBao_Login
二、扫描登录,生成cookies文件
打开淘宝登录页面,默认是二维码扫描,只有手机扫码,把生成的cookie保存到本地的json文件中。
from selenium import webdriver
import json
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
#step1
driver=webdriver.Chrome()
driver.get("https://login.taobao.com/member/login.jhtml")
driver.maximize_window()#最大化
#扫码登录,回车
input("扫码登录,回车")
Cookies=driver.get_cookies()#登录成功后,获取所有cookies,返回列表
# print(Cookies)
jsonCookies=json.dumps(Cookies)#python对象转换成json格式的字符串,返回字符串
with open("taobao_cookies.json",'w') as f:
f.write(jsonCookies)
driver.quit()
三、使用之前生成的cookies文件,完成登录,绕过登录验证
from selenium import webdriver
import json
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
driver=webdriver.Chrome()
driver.get("https://www.taobao.com")
driver.delete_all_cookies()#删除本次打开网站生成的cookies
with open ("taobao_cookies.json",'r',encoding='utf-8') as f:#打开之前生成的cookies
cookies=json.loads(f.read())#json的字符串转换成python对象
for cookie in cookies:#列表
driver.add_cookie({'domain':'.taobao.com',#添加cookie
'name':cookie['name'],
'value':cookie['value'],
'path':'/',
'expires':None})
driver.get("https://www.taobao.com")#重新打开网站
input("...")
driver.quit()
PS:OK,搞定。本文以学习自动化为主,不要用于其它用途哦~~