12306自动化抢票实现

selenium常用API find_element_by_xxx 返回第一个符合条件WebElement元素 find_elements_by_xxx 返回符合条件所有元素包含了 WebEelemnt 列表 函数 作用 find_element_by_class_name 通过class查询元素 find_element_by_id 通过ID查询元素 find_element_by_name 通过name查询元素 find_element_by_tag_name 通过标签名称 find_element_by_css_selector css样式选择 find_element_by_link_text 通过链接内容查找 find_element_by_partial_link_text 通过链接内容包含的内容查找,模糊查询 find_element_by_xpath 通过xpath查找数据 获取元素属性和文本内容 1 2 3 4 5 6 7 8 #获取属性 element.get_attribute('属性名”) #获取文本内容 element.text # 输入框输入内容 input_element.send_keys('Luenci') # 元素点击 element.click() 三种等待方式 当控制浏览器时,浏览器正在加载页面同时又去获取数据导致浏览器寻找不到需要操作的元素引发异常。 方式一:强制等待,浪费时间 time.sleep(秒数) 方式二:隐性等待,无法控制Ajax请求 browser.implicit1y_wait(等待时间) 方式三:显性等待,每个元素都可以自己定义检查条件。手动编写方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #显性等待-手动编写 t = time.time() #定义超时时间 timeout = 60 while True: try: #超时时间间隔 time.sleep(0.1) ur1_element = browser.find_element_by_class_name("fav ur1") break except: #超时处理 if time.time()- t > timeout: break pass 系统提供显性等待API 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 导入显性等待的API需要的模块 # 1等待对象模块 from selenium.webdriver.support.wait import WebDriverwait # 2导入等待条件模块 from selenium.webdriver.support import expected_conditions as EC # 3导入查询元素模块 from selenium.webdriver.common.by import By # 1.创建等待对象 # 参数一浏览器对象 # 参数二超时时间 # 参数三检查元素时间间隔 wait = WebDriverwait(browser,5.0,0.5) # 2.通过等待对象获取元素 # presence_of_element_located 检查元素是否存在,如果存在就返回如果不存在就继续检查 # visibility_of_element_located 检查元素是否可见 linkelement = s wait.until(EC.presence_of_element_located((By.CLASS_NAME,"favurl") link_element.click() 12306爬虫实现 完成代码见:https://github.com/Lucareful/12306_Tickets 实现步骤 1.访问列表页 2.通过时间判定选择点击预订 3.点击账号登录 4.输入用户名和密码(15523750230) 5.截图获取验证码图片 6.发送打码平台获取识别数字 7.定义8个点击坐标 8.模拟点击坐标 9.点击登录 10.点击选择人物 11.点击提交订单 12.点击确认订单 ...

4 min · 1773 words · Luenci