Python使用selenium模块模拟登录12306(图)

测试工具 创建于:2022-03-18
  
selenium模块概述   selenium模块是基于
浏览器自动化的一个模块。换句话说使用selenium可以让浏览器根据自己写的代码自动运行。   
相应的语法   
·编写基于浏览器自动化的操作代码   
· 发起请求:get(url)   
· 标签定位:find系列的方法   
· 标签交互:send_ keys( 'xxx')   
· 执行js程序:excute _script( 'jsCode ')一前进,后退:back() ,forward()   
· 关闭浏览器:quit()   这里就不赘述selenium模块的安装了。   
登录的具体流程   总体思路:   
· 使用selenium向12306网站发起请求,打开登陆页面   
· 根据标签的id值定位到用户账号框、用户密码框以及登录按钮   
· 填入账号密码后,点击登录按钮   
· 进行滑块验证   
· 登陆成功


  # 根据id获取用户账号输入框、密码输入框   username_tag = driver.find_element_by_id('J-userName')   password_tag = driver.find_element_by_id('J-password')   # 填入自己的账号和密码   username_tag.send_keys('xxxxxxx')   time.sleep(1)   password_tag.send_keys('xxxxxxxx')   # 根据id获取登录按钮   login_btn = driver.find_element_by_id('J-login')   # 点击登录按钮   login_btn.click()

  再点击登录按钮后,12306服务器会弹出滑块验证的窗口,需要我们使用代码模拟浏览器点击滑动完成验证。这里我们使用动作链来完成一系列操作:点击并长按,向指定方向拖拽一定的距离。
 
 动作链使用   这里我们在介绍下动作链的使用,使用动作链非常简单。   1、导入相应的模块from selenium.webdriver import ActionChains   2、用构造方法获取动作链对象   # 定义动作链,点击并拖拽   aco = ActionChains(driver)   # 点击并长按   aco.click_and_hold(span)   # 位移指定的距离   aco.move_by_offset(25,0).perform()

  注意:想让动作链执行相应的操作必须调用.perform()方法。  
 完成验证码滑块的拖动   # 定义动作链,点击并拖拽   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()

  
规避检测   由于12306会识别使用selenium模块的浏览器操作,为了规避相应的检测,我们还必须添加相应的代码。   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)

  
完整代码   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()


  
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理

权威发布,测试选择不纠结!第15届软件测试行业报告,直击行业发展,把握未来方向!

原文地址:http://www.51testing.com/?action-viewnews-itemid-5002252

免责声明:本文来源于互联网,版权归合法拥有者所有,如有侵权请公众号联系管理员

* 本站提供的一些文章、资料是供学习研究之用,如用于商业用途,请购买正版。

发表于:2022-3-18 10:13 作者:北小风 来源:稀土掘金