解決了個(gè)主要問(wèn)題,滑塊驗(yàn)證錯(cuò)誤。
文件由:vscode 編寫,瀏覽器驅(qū)動(dòng)為 EDGE.
驅(qū)動(dòng)下載地址:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)渾源免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Aixiu
# @Time : 2022/10/17 17:48:24
from selenium import webdriver
from selenium.webdriver.edge.service import Service
# 無(wú)頭Edge瀏覽器庫(kù)及規(guī)避檢測(cè)
from selenium.webdriver.edge.options import Options
# 導(dǎo)入動(dòng)作鏈對(duì)應(yīng)的類
from selenium.webdriver import ActionChains
import time
# 創(chuàng)建一個(gè)參數(shù)對(duì)象,用來(lái)控制 Edge以無(wú)界面模式打開
edge_options = Options()
# 反檢測(cè)設(shè)置 #
# 規(guī)避被檢測(cè)到的風(fēng)險(xiǎn)
# 開啟開發(fā)者模式
# option = EdgeOptions()
edge_options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 去掉:瀏覽器上方有“Chrome正受到自動(dòng)測(cè)試軟件的控制
edge_options.add_experimental_option("detach", True)
# 禁用啟用Blink運(yùn)行時(shí)的功能
edge_options.add_argument('--disable-blink-features=AutomationControlled')
# 將參數(shù)傳給瀏覽器 (options=edge_options)
bro = webdriver.Edge(service=Service('./msedgedriver.exe'), options=edge_options)
bro.get('https://kyfw..cn/otn/resources/login.html')
# 解決特征識(shí)別, 用來(lái)解決滑塊出錯(cuò),驗(yàn)證問(wèn)題
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
bro.execute_script(script)
# 根據(jù)id獲取用戶賬號(hào)輸入框、密碼輸入框,并輸入賬號(hào)密碼
time.sleep(2)
username_tag = bro.find_element(by='id', value='J-userName').send_keys('改為你的用戶名')
time.sleep(2)
password_tag = bro.find_element(by='id', value='J-password').send_keys('改為你的密碼')
# 根據(jù)id獲取登錄按鈕并點(diǎn)擊
login_btn = bro.find_element(by='id', value='J-login').click()
# 盡量休眠長(zhǎng)一點(diǎn),不然,代碼難以定位到滑塊
time.sleep(2)
span = bro.find_element(by='id', value='nc_1_n1z')
# 定義動(dòng)作鏈,點(diǎn)擊并拖拽
aco = ActionChains(bro)
# 點(diǎn)擊并長(zhǎng)按
aco.click_and_hold(span)
#perform()立即執(zhí)行動(dòng)作鏈操作
for i in range(10):
aco.move_by_offset(36,0).perform()
time.sleep(0.3)
# 釋放動(dòng)作鏈
aco.release()
time.sleep(2)
# 點(diǎn)擊登錄后的彈窗 確定 按鈕
ok_btn = bro.find_element(by='class name', value='ok').click()
time.sleep(5)
bro.quit()