Selenium实现去哪儿网登录和搜查机票

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image
import time
from fateadm_api import TestFunc
global driver
try:
    driver = webdriver.Chrome()
    driver.get("https://user.qunar.com/passport/login.jsp?")            #去哪儿网址
    driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/a").click()            #点击账号密码登录
    driver.implicitly_wait(20)
    driver.maximize_window()
    driver.save_screenshot("D:\web.png")                              #将当前网页截图
    imgcode = driver.find_element_by_id("vcodeImg")                    #找到验证码图片元素
    left = imgcode.location["x"]                                       #获取相对坐标
    top = imgcode.location["y"]
    right = left + imgcode.size["width"]                               #获取长度何况度
    bottom = top + imgcode.size["height"]
    im = Image.open("D:\web.png")                                     #打开网页截图
    im = im.crop((left, top, right, bottom))                           #按照获取的验证码的坐标,从网页截图中再截取验证码
    im.save("D:\webtest.png")                                         #保存验证码图片
    driver.find_element_by_name("username").send_keys("用户账号")       #登录去哪儿
    driver.find_element_by_name("password").send_keys("用户密码")      
    driver.find_element_by_name("chkrem").click()
    text = str(TestFunc()) #此处是获取验证码识别结果                                            
    #TestFunc()是第三方平台斐斐打码的接口,用来识别验证码,下载地址http://docs.fateadm.com/web/#/1?page_id=37                               
    print(text)
    driver.find_element_by_name("vcode").send_keys(text)
    driver.find_element_by_id("submit").click()
    time.sleep(3)
    driver.find_element_by_class_name("q_header_mini_link").click()
    time.sleep(3)
    driver.find_element_by_id("js_searchtype_roundtrip").click()
    #选择前往日期,日期尝试用过普通寻找元素的方法做,但不管用,所以采用jquery方法
    jq = '$("#js_domestic_fromdate").val("2020-06-07")'
    driver.execute_script(jq)
    #选择返回日期
    jq1 = '$("#js_domestic_todate").val("2020-06-13")'
    driver.execute_script(jq1)
    #选择出发城市
    a = driver.find_element_by_name("fromCity")
    a.clear()
    a.send_keys("上海")
    #选择到达城市
    b = driver.find_element_by_name("toCity")
    b.send_keys("海口")
    #点击搜索
    b = driver.find_element_by_xpath(".//span[@class='p_btn']/button")
    ActionChains(driver).click(b).perform()
finally:
    a = "n"
    while a == "n":
        a = input("是否关闭浏览器驱动?y/n
")
        if a == "n":
            pass
        else:
            time.sleep(3)
            driver.quit()

验证码识别参考书籍:田春亮的selenium3+python3

原文地址:https://www.cnblogs.com/loveniko/p/13036164.html