淘宝作为一大电商网站,反爬措施还是相当的完善的,在我的文章中 淘宝爬虫 之 登陆验证(一)是以cookie验证的,这次用selenium验证,用过selenium登陆淘宝的应该知道登陆页面对selenium的检测是很严格的,只要一打开就会被检测到,网上也有说用其他登陆方式登陆的(支付宝登陆),我试过,可行,不过今天说的是正常的账号密码登陆
from seleniumimport webdriver
from selenium.webdriverimport ActionChains
import time
#打开一个浏览器对象
driver = webdriver.Chrome()
#打开淘宝登陆页面
driver.get('https://login.taobao.com/member/login.jhtml')
#模拟点击到账号密码登陆
driver.find_element_by_id("J_Quick2Static").click()
#输入账号密码
driver.find_element_by_id("TPL_username_1").send_keys("账号")
password = driver.find_element_by_id("TPL_password_1").send_keys("密码")
time.sleep(1)
#模拟滑块滑动
slider = driver.find_element_by_xpath("//*[@id='nc_1_n1z']")
# 平行移动鼠标
action = ActionChains(driver)
action.drag_and_drop_by_offset(slider,500,0).perform()
#模拟点击登陆
driver.find_element_by_id("J_SubmitStatic").click()
运行这段代码会出现一个滑块,无论怎么滑,手动滑都会被检测到,因为当你用selenium打开的时候就会被淘宝后端验证出来是个机器,那么如何解决呢?当然是找到淘宝是怎么验证的了,经过在网上查找各种资料(技术大牛还是很多的);在开发者模式下输入window.navigator.webdriver会发现和正常的浏览器打开的有所不同
1-11-1就是selenium打开的浏览器,为true,但是正常浏览器打开的并不是true,淘宝应该就是通过这个方法检测selenium的
1-2正常浏览器打开的是undefined或者false,那么如何修改呢?
下面我说的是一个抓包工具 fiddler,用它将登陆页面的js替换掉,换成我们修改过的js文件,将window.navigator.webdriver的值改变,就可以绕过淘宝检测了
首先找到淘宝登陆页面的js
1-3将里面的js代码保存起来,在这个保存起来的js代码中写入我们自己的代码
1-4Object.defineProperties(navigator,{
webdriver:{
get:() =>false
}
})
然后就是替换了,打开我们的fiddler,先运行一下我们刚才无法登陆的代码,在fiddler中找到登陆页面的js,将这个js代码拖动到右边,3的位置就是我们自己js的路径
1-5替换好js文件之后就可以运行了,就会发现登陆的滑块检测已经不会出现了,,因为滑块不会出现了,所以代码需要改变一下,
from seleniumimport webdriver
import time
#打开一个浏览器对象
driver = webdriver.Chrome()
#打开淘宝登陆页面
driver.get('https://login.taobao.com/member/login.jhtml')
#模拟点击到账号密码登陆
driver.find_element_by_id("J_Quick2Static").click()
#输入账号密码
driver.find_element_by_id("TPL_username_1").send_keys("账号")
password = driver.find_element_by_id("TPL_password_1").send_keys("密码")
time.sleep(1)
#模拟点击登陆
driver.find_element_by_id("J_SubmitStatic").click()
可以登陆成功了,再看一次window.navigator.webdriver,发现它已经变成了false了
1-6带上selenium自动登陆页面的cookie就可以爬取数据了
网友评论