官网 2023/1/24可用"/>
利用Selenium模拟登录12306官网 2023/1/24可用
整个过程其实比较简单,结合注释进行理解。代码如下:
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver import ChromeOptions
from selenium.webdrivermon.by import Byoption = ChromeOptions()
option.add_experimental_option("excludeSwitches", ["enable-automation"]) # 反检测
option.add_experimental_option("detach", True) # 代码结束后不自动关闭浏览器
# 实例化浏览器
driver = webdriver.Chrome(options=option)
# driver.maximize_window() # 为了美观可设置网页全屏,不全屏也没影响,可注释
# 对12306发起请求
driver.get((".html"))
# 解决webdriver被识别的问题
script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'
driver.execute_script(script)
sleep(2)# 定位用户名框和密码框
userName_tag = driver.find_element(By.ID, 'J-userName')
password_tag = driver.find_element(By.ID, 'J-password')
# 输入你自己的账号和密码
userName_tag.send_keys('xxxxxxxxxx') # 用户账号
password_tag.send_keys('xxxxxxxxxx') # 用户密码
# 定位登录按钮并点击
driver.find_element(By.ID, 'J-login').click()
sleep(2)# 点击登录后会弹出一个滑块界面需要拖动验证。定位该滑块
span_tag = driver.find_element(By.ID, 'nc_1_n1z')
# 实例化动作链
action = ActionChains(driver)
# 点击且长按该滑块
action.click_and_hold(span_tag)
# 用一个for循环进行拖动
for i in range(5):action.move_by_offset(70, 0).perform() # 向右拖动,一次拖动70个像素点sleep(0.3)
action.release() # 释放动作链
仍有相关代码不理解的可以参考这位优秀博主的文章:
更多推荐
利用Selenium模拟登录12306官网 2023/1/24可用
发布评论