Aperçu des modules de sélénium
Le module selenium est un module basé sur l'automatisation du navigateur . En d'autres termes, l'utilisation de sélénium peut permettre au navigateur de s'exécuter automatiquement en fonction du code écrit par lui-même.
syntaxe correspondante
Écrire du code opérationnel pour l' automatisation basée sur un navigateur
· Initier une requête : get(url)
Positionnement des étiquettes : la méthode de recherche de séries
· Interaction des onglets : send_keys('xxx')
· Exécutez le programme js : exécutez _script('jsCode ') pour avancer et reculer : back() ,forward()
· Fermez le navigateur : quit()
Je n'entrerai pas dans les détails de l'installation du module sélénium ici.
Le processus spécifique de connexion
idée générale:
· Utilisez le sélénium pour lancer une demande sur le site Web 12306 et ouvrez la page de connexion
Localisez la boîte de compte d'utilisateur, la boîte de mot de passe d'utilisateur et le bouton de connexion en fonction de la valeur d'identification de la balise
Après avoir rempli le mot de passe du compte, cliquez sur le bouton de connexion
Effectuer la vérification du curseur
· Connexion réussie
# Obtenir la zone de saisie du compte utilisateur et la zone de saisie du mot de passe en fonction de l'identifiant
username_tag = driver.find_element_by_id('J-userName')
password_tag = driver.find_element_by_id('J-password')
# Remplissez votre propre compte et mot de passe
username_tag.send_keys('xxxxxxx')
temps.sommeil(1)
password_tag.send_keys('xxxxxxxx')
# Obtenir le bouton de connexion par identifiant
login_btn = driver.find_element_by_id('J-login')
# Cliquez sur le bouton de connexion
login_btn.click()
Après avoir cliqué à nouveau sur le bouton de connexion, le serveur 12306 affichera la fenêtre de vérification du curseur, ce qui nous oblige à utiliser le code pour simuler le navigateur pour cliquer et faire glisser pour terminer la vérification. Ici, nous utilisons la chaîne d'action pour effectuer une série d'opérations : cliquez et maintenez enfoncé, faites glisser une certaine distance dans la direction spécifiée.
Utilisation de la chaîne d'action
Ici, nous introduisons l'utilisation des chaînes d'action. L'utilisation des chaînes d'action est très simple.
1. Importez le module correspondant depuis selenium.webdriver import ActionChains
2. Utilisez le constructeur pour obtenir l'objet de la chaîne d'action
# Définissez la chaîne d'action, cliquez et faites glisser
aco = ActionChains(driver)
# 点击并长按
aco.click_and_hold(span)
# 位移指定的距离
aco.move_by_offset(25,0).perform()
Remarque : La méthode .perform() doit être appelée pour que la chaîne d'actions effectue l'opération correspondante.
Terminez de faire glisser le curseur captcha
# Définissez la chaîne d'action, cliquez et faites glisser
aco = ActionChains(driver)
# 点击并长按
aco.click_and_hold(span)
#perform()立即执行动作链操作
for i in range(5):
aco.move_by_offset(25,0).perform()
time.sleep(0.3)
# 释放动作链
aco.release()
Éviter d'être repéré
Étant donné que 12306 reconnaîtra les actions du navigateur qui utilisent des modules de sélénium, afin d'éviter la détection correspondante, nous devons également ajouter le code correspondant.
from selenium.webdriver import ChromeOptions
chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(executable_path='你的chromedriver路径',chrome_options=chrome_options)
code complet
from selenium import webdriver
import requests
from lxml import etree
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
from selenium.webdriver import ActionChains
import time
# 实现无可视化界面
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
# 这里填入你自己的chromedriver的安装路径
driver = webdriver.Chrome(executable_path='C:/Users/Declan/AppData/Local/Google/Chrome/Application/chromedriver',chrome_options=chrome_options)
driver.get('https://kyfw.12306.cn/otn/resources/login.html')
# 根据id获取用户账号输入框、密码输入框
username_tag = driver.find_element_by_id('J-userName')
password_tag = driver.find_element_by_id('J-password')
# 填入自己的账号和密码
username_tag.send_keys('xxxxxxxx')
time.sleep(1)
password_tag.send_keys('xxxxxx')
# 根据id获取登录按钮
login_btn = driver.find_element_by_id('J-login')
# 点击登录按钮
login_btn.click()
# 这里必须得休眠,不然运行速度太夸,代码难以定位到滑块
time.sleep(2)
span = driver.find_element_by_css_selector('.btn_slide')
# 定义动作链,点击并拖拽
aco = ActionChains(driver)
# 点击并长按
aco.click_and_hold(span)
#perform()立即执行动作链操作
for i in range(5):
aco.move_by_offset(25,0).perform()
time.sleep(0.3)
# 释放动作链
aco.release()
time.sleep(2)
ok_btn = driver.find_element_by_css_selector('.ok')
ok_btn.click()
time.sleep(5)
driver.quit()