吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4114|回复: 15
收起左侧

[Python 转载] Selenium模拟淘宝登陆的一次尝试

[复制链接]
南岸 发表于 2021-1-25 21:20

最近在学习爬虫,今天看实战是要爬取淘宝的一些信息,老师讲的挺好,自己来就死到这个登陆了,所以尝试写了一个模拟登陆,还望大佬指正

# -*- coding: utf-8 -*-
"""
@Time : 2021/1/25 19:28
@Auth : Ne-21
@file :taobao_login.py
@IDE :PyCharm
@Motto:Another me.

"""
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 import ActionChains
import time

options = webdriver.ChromeOptions()
browser = webdriver.Chrome(options=options)
# 防止被监测
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": '''
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
          '''
})
wait = WebDriverWait(browser, 5)

def do_slider():
    """
    处理滑动验证码
    :return:
    """
    slider_go = wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '#nc_1_n1z'))
    )
    # 实例化一个动作链关联游览器
    action = ActionChains(browser)
    action.reset_actions()
    # 使用鼠标动作链进行点击并悬浮
    action.click_and_hold(slider_go)
    # 滑动验证码
    action.move_by_offset(xoffset=258, yoffset=0).perform()
    time.sleep(1)

def login(username, password):
    browser.get('https://login.taobao.com/member/login.jhtml')
    input_username = wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '#fm-login-id'))
    )
    input_password = wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '#fm-login-password'))
    )
    submit = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '#login-form > div.fm-btn > button'))
    )
    input_username.send_keys(username)
    time.sleep(2)
    input_password.send_keys(password)
    time.sleep(2)
    submit.click()
    time.sleep(3)  # 等待检验滑块

    # 判断有无滑块验证
    try:
        slider = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#nc_1__scale_text > span'))
        )
        if bool(slider):
            print('发现滑块验证码')
            time.sleep(2)
            do_slider()
            submit.click()
        else:
            print('未发现滑块')
            pass
    except:
        print('未发现滑块')
    finally:
        print('登录成功')

def main():
    login(username='', password='')

if __name__ == '__main__':
    main()

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
riwfhiu + 1 + 1 感谢分享

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

joffrey 发表于 2021-2-7 17:19
[Python] 纯文本查看 复制代码
Traceback (most recent call last):
  File "C:\Users\zp\Desktop\myPython\taobao\login.py", line 63, in login
    do_slider()
  File "C:\Users\zp\Desktop\myPython\taobao\login.py", line 34, in do_slider
    action.move_by_offset(xoffset=258, yoffset=0).perform()
  File "C:\Program Files\Python38\lib\site-packages\selenium\webdriver\common\action_chains.py", line 80, in perform
    self.w3c_actions.perform()
  File "C:\Program Files\Python38\lib\site-packages\selenium\webdriver\common\actions\action_builder.py", line 76, in perform
    self.driver.execute(Command.W3C_ACTIONS, enc)
  File "C:\Program Files\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Program Files\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.
  (Session info: chrome=88.0.4324.150)


没懒用。并且手动滑过去仍然被检测到了,无法登录
苏晓宇c 发表于 2021-1-25 22:08
?淘宝吗,我做数据可视化  刚写了淘宝的爬虫。

我直接做了扫码登陆,没写登陆的滑块验证,但是爬虫的时候 会出来滑块验证
用ActionChains和move_by_offset,
过不了那个验证,

我试了 把x坐标i直接放到for循环了 和 用模拟减速的方法

都不行,

楼主如果有什么好办法了,记得@我一下,感谢。
Tomatoman 发表于 2021-1-25 21:28
super谦 发表于 2021-1-26 08:32
苏晓宇c 发表于 2021-1-25 22:08
?淘宝吗,我做数据可视化  刚写了淘宝的爬虫。

我直接做了扫码登陆,没写登陆的滑块验证,但是爬虫的时 ...

是不是说操作太频繁,叫你休息一下的
hyzhangyong 发表于 2021-1-26 09:19
苏晓宇c 发表于 2021-1-25 22:08
?淘宝吗,我做数据可视化  刚写了淘宝的爬虫。

我直接做了扫码登陆,没写登陆的滑块验证,但是爬虫的时 ...

这种是没办法的,操作频繁了,硬要你隔15分钟。手动操作一样。只要给识别为恶意访问。
千年恨 发表于 2021-1-26 09:22
selenium的内核被检测了 chromedriver也一样 需要修改
苏晓宇c 发表于 2021-1-26 11:30
super谦 发表于 2021-1-26 08:32
是不是说操作太频繁,叫你休息一下的

不是,就是验证码拦截
苏晓宇c 发表于 2021-1-26 11:31
hyzhangyong 发表于 2021-1-26 09:19
这种是没办法的,操作频繁了,硬要你隔15分钟。手动操作一样。只要给识别为恶意访问。

我到没有硬隔15分钟,只是出一个滑块验证,用selenium过不去,只能手动滑块,过去了就可以正常浏览。
苏晓宇c 发表于 2021-1-26 11:33
千年恨 发表于 2021-1-26 09:22
selenium的内核被检测了 chromedriver也一样 需要修改

对的,楼主给那个代码,上来加一个JS劫持,其实过不了淘宝对selenium和Chromedrive的检测。

我现在的替代方案是用Firefox驱动,这个可以过滑块。
 楼主| 南岸 发表于 2021-1-28 08:49
苏晓宇c 发表于 2021-1-26 11:33
对的,楼主给那个代码,上来加一个JS劫持,其实过不了淘宝对selenium和Chromedrive的检测。

我现在的 ...

其实自己在chromedrive正常登陆下就不会有滑块和短信了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表