Python中如何使用selenium实现天猫爬虫登录
1.获取 cookies:
使用 selenium 打开 chrome 访问天猫登陆界面,接着扫码登陆并保存 cookies,
2.使用 cookies:
再用 selenium 打开一个 chrome 访问天猫登陆界面,给 driver 添加刚才保存的 cookies,此时再访问某个商品界面时还会要求登陆
这两步间隔比较短,cookies 应该没有过期
求问,为什么 cookies 没有效果 /哭
Python中如何使用selenium实现天猫爬虫登录
因为天猫对 selenium 有指纹信息识别,可以尝试捕获下天猫发送过来的 js 文件,修改检测代码,拦截替换下……
要爬天猫得先过登录这关,Selenium模拟登录的核心是处理验证码和等待页面加载。天猫登录现在主要有两种方式:扫码和密码登录,我们通常模拟密码登录流程。
直接上代码,这里用Chrome驱动,记得先装好chromedriver:
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.common.exceptions import TimeoutException
import time
class TmallLogin:
def __init__(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver, 10)
def login(self, username, password):
"""执行登录流程"""
try:
# 1. 打开天猫登录页
self.driver.get('https://login.tmall.com/')
time.sleep(2)
# 2. 切换到密码登录标签
pwd_login = self.wait.until(
EC.element_to_be_clickable((By.XPATH, '//a[contains(text(), "密码登录")]'))
)
pwd_login.click()
time.sleep(1)
# 3. 输入用户名
username_input = self.wait.until(
EC.presence_of_element_located((By.ID, 'fm-login-id'))
)
username_input.clear()
username_input.send_keys(username)
# 4. 输入密码
pwd_input = self.driver.find_element(By.ID, 'fm-login-password')
pwd_input.clear()
pwd_input.send_keys(password)
# 5. 处理滑动验证码(如果有)
self._handle_slider_captcha()
# 6. 点击登录按钮
login_btn = self.driver.find_element(By.XPATH, '//button[@type="submit"]')
login_btn.click()
# 7. 等待登录成功,检查是否跳转到首页
self.wait.until(
EC.url_contains('tmall.com')
)
print("登录成功!")
return True
except TimeoutException as e:
print(f"登录超时: {e}")
return False
except Exception as e:
print(f"登录失败: {e}")
return False
def _handle_slider_captcha(self):
"""处理滑动验证码"""
try:
# 等待滑块出现
slider = WebDriverWait(self.driver, 5).until(
EC.presence_of_element_located((By.ID, 'nc_1_n1z'))
)
if slider.is_displayed():
print("检测到滑动验证码,开始模拟滑动...")
# 获取滑块轨道宽度
track = self.driver.find_element(By.ID, 'nc_1__scale_text')
track_width = track.size['width']
# 执行滑动动作
action = webdriver.ActionChains(self.driver)
action.click_and_hold(slider)
action.move_by_offset(track_width - 10, 0) # 留一点余量
action.release()
action.perform()
time.sleep(2) # 等待验证结果
except TimeoutException:
print("未检测到滑动验证码,继续登录流程")
except Exception as e:
print(f"处理验证码时出错: {e}")
def get_cookies(self):
"""获取登录后的cookies"""
return self.driver.get_cookies()
def close(self):
self.driver.quit()
# 使用示例
if __name__ == '__main__':
crawler = TmallLogin()
try:
if crawler.login('your_username', 'your_password'):
cookies = crawler.get_cookies()
print(f"获取到 {len(cookies)} 个cookies")
# 这里可以继续你的爬虫逻辑
finally:
crawler.close()
几个关键点:
- 显式等待比time.sleep()更可靠,用WebDriverWait等元素加载完成
- 天猫经常改登录页面结构,XPath选择器可能需要调整
- 滑动验证码是主要难点,上面的滑动逻辑是基础版,复杂情况可能需要更精细的控制
- 登录成功后获取cookies,后续请求可以直接用这些cookies,不用每次都登录
实际用的时候可能会遇到各种验证码,简单的滑动验证码还能处理,要是遇到点选验证码或者短信验证,那就得考虑用打码平台了。
总结:天猫登录的核心是处理验证码和页面等待。
天猫的防爬很先进的…
你这个模型太简单了…一下下就被设别了…
天猫 cookie 很多的,你确定你添加全了吗,你都用 selenium 了直接登陆完开爬不行吗,一个账号爬个 5、6 页大概就会出验证了
selenium 已经被淘宝系产品防死了,目前暂时能解决的就是修改 window.navigator.webdriver
能请教下,爬这些电商爬来的数据,怎么变现?很好奇
可以做国内代购
试下 puppeter
其实你要是想搞到淘宝商品的数据,还不如直接爬一些做代购的公司的网站,人家用的是接口,还稳定
换成 firefox, 或者使用 puppeteer 试试
https://www.jianshu.com/p/afdabf486b54(然后参考这个)
如果要抓 cnbeta 这种网站,能做到吗?
天猫正常访问还时不时来个验证,
谢谢大家的回复, 果然用天猫作为练习太难了, /哭 没把握好难度. 实验室的师兄师姐推荐换个网站练习
3 楼说的是 OK 的, 可以登录后直接开爬, 不方便的地方是得显示浏览器界面. 如果不显示浏览器界面的话, 登录这块也是个大难点, 所以我才想着用 cookie 跳过登录,同时不再显示浏览器界面
同时也感谢其他小伙伴们提出的建议, 我会去尝试哒~
再次感谢大家!!
selenium 这种东西,理所当然的会被淘宝系封,连我挂 VPN 访问都会被封。淘宝系现在的体验是越来越差,所以都不要淘宝天猫了
我怀疑淘宝已经走火入魔,现在调试工具已经开始请求 webmidi 这种正常需求不可能用到的技术了,我怀疑是他在枚举当前浏览器支持的是所有技术,来判断你是正常的 chrome 还是在 headless 里
说白就是技术检测 加 行为规则验证。
技术检测就不说了
行为规则:比如正常人浏览一种商品的一页数据,最低也要超过 1 秒钟(极限啊 CAC )。你搞的爬虫一秒钟上百个页面,当然过不了。(行为规则库还是很强大的)
别说是爬虫,正常人点都会出现这种验证,搜索几下就让爷休息,疯了
selenium 基本上是没有办法爬取阿里系的网站的
他们会检查你的浏览器的 webdriver 是否为 True。
即使绕过了这个检测,还有各种各样的 js 行为检测


