selenium + chromedriver 模拟用户登陆。主要解决登录滑块的问题。
滑块被检验出来为 webdriver 驱动
先把chromedriver.exe文件.bak 备份一份
下载nodepadd++ 编辑器,右击打开 chromedriver.exe ,ctrl + F, 输入 $cdc
将红色划线部分内容随便改一下,位数长度不变。
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
user_ag = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
options.add_argument('user-agent=%s' % user_ag)
driver = webdriver.Chrome(executable_path="chromedriver", options=options)
# 打开某宝登录页面
driver.get("某宝登录地址")
# 定义js代码
script = "Object.defineProperty(navigator,'webdriver',{get: ()=> false,});"
# 执行js代码
driver.execute_script(script)
time.sleep(2)
driver.find_element(By.NAME,'fm-login-id').send_keys("用户名")
time.sleep(2)
driver.find_element(By.NAME,'fm-login-password').send_keys("密码")
time.sleep(2)
try:
# 找到滑块
slider = driver.find_element(By.XPATH,"//span[contains(@class, 'btn_slide')]")
# 判断滑块是否可见
if slider.is_displayed():
# 点击并且不松开鼠标
ActionChains(driver).click_and_hold(on_element=slider).perform()
# 往右边移动258个位置
ActionChains(driver).move_by_offset(xoffset=258, yoffset=0).perform()
# 松开鼠标
ActionChains(driver).pause(0.5).release().perform()
except:
pass
time.sleep(2)
driver.find_element(By.XPATH,'//*[@id="login-form"]/div[4]/button').click()