首先下载关于selenium库;
关于自动登录12306网的源码(在源码中有各步骤的详细中文解决):
# 12306网站selenium自动化登录
from selenium.webdriver import Chrome, ChromeOptions
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
options = ChromeOptions() # 创建谷歌浏览器
options.add_experimental_option("detach", True) # 修改谷歌浏览器测试选项中的参数,使得打开后的浏览器不会自动关闭
# 添加_实验_选项
# options.add_argument('--start-maximized') # 这里是不去掉网页头部的大窗口浏览
options.add_argument('--disable-blink-features=AutomationControlled')
# 修改谷歌浏览器中的window.navigator.webdriver(正常浏览器控制台中用来检测是不是机器操作的行为,正常浏览器为False)
# 通过以上对add_argument参数的修改即可
web = Chrome(options=options) # 创建一个浏览器对象并将修改好的参数传入进去
web.get("https://kyfw.12306.cn/")
# 打开网页
time.sleep(2)
web.find_element(By.XPATH, '//*[@id="J-userName"]').send_keys('123455678') # 这两行分别是填入12306的账号与密码
web.find_element(By.XPATH,'//*[@id="J-password"]').send_keys('876545321') # 这里用来演示就不是真实账号
web.find_element(By.XPATH,'//*[@id="J-login"]').click()
time.sleep(2) # 这里的休眠很重要,不然反应太快脚本识别不到要拖动的东西,会报错!!!
btn = web.find_element(By.XPATH, '//*[@id="nc_1_n1z"]') # 这里你注意找XPATH时在脚本自动打开的浏览器中找,不然位置不一样会报错
# 找到需要拖拽验证的滚动条
time.sleep(2)
ActionChains(web).drag_and_drop_by_offset(btn, 450, 0).perform()
# 从selenium.webdriver 中引入 ActionChains(链条)模块
# drag_and_drop_by_offset为拖拽的功能指令其中需传入的参数依次为 1.需拖拽的位置,2.横向拖拽的距离.3.纵向拖拽距离
# perform()执行指令
print(f"12306网自动化登录程序", end='\n''over!')
注:上面代码重要的点:
在使用selenium中遇到登陆时滑动进度条的问题;
在滑动进度条前要先解决浏览器在控制台可以识别出是否为机器或第三方来操作的问题(window.navigator.webdriver # 正常为False);
对与Ajax页面要使用time库来让程序休眠几秒,不然可能会报错;
对ActionChains()下的函数在其后加上perform()函数,才会执行;
最新的selenium库会程序执行完之后自动关闭,若不想让浏览器自动关闭 需在创建Chrome浏览器对象的时候对其选项中添加一个参数指定其bool(detach)值为True,即可解决此问题;
温馨:对与那些用cookies值登录用到验证码问题时,不用慌,这里可以在网上搜所那些比较成熟的验证码破解工具即可破解各种验证码,例如:(超级鹰)
ok,对上述程序就到这里咯,下次继续分享,如有歧义或其他更好的思路欢迎在评论区中指出。