Python中如何使用selenium实现天猫爬虫登录

1.获取 cookies:
使用 selenium 打开 chrome 访问天猫登陆界面,接着扫码登陆并保存 cookies,
2.使用 cookies:
再用 selenium 打开一个 chrome 访问天猫登陆界面,给 driver 添加刚才保存的 cookies,此时再访问某个商品界面时还会要求登陆
这两步间隔比较短,cookies 应该没有过期
求问,为什么 cookies 没有效果 /哭
Python中如何使用selenium实现天猫爬虫登录

20 回复

因为天猫对 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()

几个关键点:

  1. 显式等待比time.sleep()更可靠,用WebDriverWait等元素加载完成
  2. 天猫经常改登录页面结构,XPath选择器可能需要调整
  3. 滑动验证码是主要难点,上面的滑动逻辑是基础版,复杂情况可能需要更精细的控制
  4. 登录成功后获取cookies,后续请求可以直接用这些cookies,不用每次都登录

实际用的时候可能会遇到各种验证码,简单的滑动验证码还能处理,要是遇到点选验证码或者短信验证,那就得考虑用打码平台了。

总结:天猫登录的核心是处理验证码和页面等待。

天猫的防爬很先进的…
你这个模型太简单了…一下下就被设别了…

天猫 cookie 很多的,你确定你添加全了吗,你都用 selenium 了直接登陆完开爬不行吗,一个账号爬个 5、6 页大概就会出验证了

selenium 已经被淘宝系产品防死了,目前暂时能解决的就是修改 window.navigator.webdriver

能请教下,爬这些电商爬来的数据,怎么变现?很好奇

可以考虑用测试框架来干这种事,比如在真机上用 airtest

可以做国内代购

试下 puppeter

其实你要是想搞到淘宝商品的数据,还不如直接爬一些做代购的公司的网站,人家用的是接口,还稳定

换成 firefox, 或者使用 puppeteer 试试
https://www.jianshu.com/p/afdabf486b54(然后参考这个)

如果要抓 cnbeta 这种网站,能做到吗?

天猫正常访问还时不时来个验证,

谢谢大家的回复, 果然用天猫作为练习太难了, /哭 没把握好难度. 实验室的师兄师姐推荐换个网站练习
3 楼说的是 OK 的, 可以登录后直接开爬, 不方便的地方是得显示浏览器界面. 如果不显示浏览器界面的话, 登录这块也是个大难点, 所以我才想着用 cookie 跳过登录,同时不再显示浏览器界面
同时也感谢其他小伙伴们提出的建议, 我会去尝试哒~
再次感谢大家!!

selenium 这种东西,理所当然的会被淘宝系封,连我挂 VPN 访问都会被封。淘宝系现在的体验是越来越差,所以都不要淘宝天猫了

连正常访问都可能拦截何况是个爬虫入门都会写的 selenium。。。

我怀疑淘宝已经走火入魔,现在调试工具已经开始请求 webmidi 这种正常需求不可能用到的技术了,我怀疑是他在枚举当前浏览器支持的是所有技术,来判断你是正常的 chrome 还是在 headless 里

说白就是技术检测 加 行为规则验证。
技术检测就不说了
行为规则:比如正常人浏览一种商品的一页数据,最低也要超过 1 秒钟(极限啊 CAC )。你搞的爬虫一秒钟上百个页面,当然过不了。(行为规则库还是很强大的)

别说是爬虫,正常人点都会出现这种验证,搜索几下就让爷休息,疯了

selenium 基本上是没有办法爬取阿里系的网站的
他们会检查你的浏览器的 webdriver 是否为 True。
即使绕过了这个检测,还有各种各样的 js 行为检测

回到顶部