0


python+selenium绕过滑块验证,实现自动登录

实现taobao自动化登录,当用webdriver打开淘宝时,滑块验证一直失败,手动滑都会失败。因为淘宝会检测window.navigator.webdriver,控件检测到你是selenium进入,所以就会弹出滑块验证。只需要绕过检测就能实现自动登录

验证了两种方法可以跳过:

第一种是给浏览器加启动参数,开启远程调试--remote-debugging-port=9222

这种方法虽然可以跳过检测,但是必须要手动打开浏览器再执行脚本,不是我想要的结果

于是找到了第二种方法

#去除浏览器识别,去除浏览器上方有“Chrome正受到自动测试软件的控制”
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)

跳转到登录页面后,再 解决特征识别.因为服务器识别到的selenium的特征。使用该两行代码更改了特征,即可以顺利通过识别
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
driver.execute_script(script)

可以看到解除识别后window.navigator.webdriver的值变成了false

直接上 登录源码:

#给浏览器加启动参数,开启远程调试--remote-debugging-port=9222
#window.navigator.webdriver
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Options
from selenium.webdriver import ChromeOptions
import time

'''#去除浏览器识别(这种方法要在浏览器上加启动参数,且必须要手动打开浏览器)
option = Options()
option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")'''

#去除浏览器识别
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)

#加载相应浏览器的驱动文件
#这会到的一个浏览器的示例对象,每实例化一个对象,都会打开一个新的浏览器
driver = webdriver.Chrome(r'C:\Program Files\Python35-32\chromedriver.exe',options=option)
#打开一个新页面,默认多个请求连接会被覆盖,只显示最后一个请求
page = driver.get('https://www.taobao.com/')
driver.maximize_window()#将浏览器最大化,有界面的情况下正常
driver.implicitly_wait(1)#设置等待时间,防止因为页面没加载出来而获取不到页面元素Xpath

account = '============='
password = '============='

#首页点击登录,跳转到登录页面
time.sleep(3)
login = driver.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]')
login.click()
driver.implicitly_wait(1)

# 解决特征识别.因为服务器识别到的selenium的特征。使用该两行代码更改了特征,即可以顺利通过识别
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
driver.execute_script(script)

#通过账号密码登录
#输入用户名,通过元素id定位
username_input = driver.find_element_by_id('fm-login-id')
username_input.click()#点击账号输入框
username_input.send_keys(account)
time.sleep(2)

#输入密码,通过元素name定位
password_input = driver.find_element_by_name('fm-login-password')
password_input.click()
password_input.send_keys(password)
time.sleep(2)

#点击登录,通过xpath定位
login_btn = driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/button')
login_btn.click()
time.sleep(5)

#关闭浏览器
driver.quit()
标签: python

本文转载自: https://blog.csdn.net/missy06/article/details/127747089
版权归原作者 代代2022 所有, 如有侵权,请联系我们删除。

“python+selenium绕过滑块验证,实现自动登录”的评论:

还没有评论