zoukankan      html  css  js  c++  java
  • python使用selenium安装chromedriver的问题

    环境

    win64位,python3.6,

    问题与解决

    说来也巧,今天无意中解决了两个多月前的问题,即用selenium调用chrome浏览器报错的问题;起因是在知乎中看到了一篇12306抢票的文章,用splinter实现抢票,先把代码贴出来,晚点再研究

    from splinter.browser import Browser
    from time import sleep
    import traceback
    
    
    class Buy_Tickets(object):
        # 定义实例属性,初始化
        def __init__(self, username, passwd, order, passengers, dtime, starts, ends):
            self.username = username
            self.passwd = passwd
            # 车次,0代表所有车次,依次从上到下,1代表所有车次,依次类推
            self.order = order
            # 乘客名
            self.passengers = passengers
            # 起始地和终点
            self.starts = starts
            self.ends = ends
            # 日期
            self.dtime = dtime
            # self.xb = xb
            # self.pz = pz
            self.login_url = 'https://kyfw.12306.cn/otn/login/init'
            self.initMy_url = 'https://kyfw.12306.cn/otn/index/initMy12306'
            self.ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
            self.driver_name = 'chrome'
            self.executable_path = 'C:Program FilesPython36ChromeDriver.exe'
        # 登录功能实现
        def login(self):
            self.driver.visit(self.login_url)
            self.driver.fill('loginUserDTO.user_name', self.username)
            # sleep(1)
            self.driver.fill('userDTO.password', self.passwd)
            # sleep(1)
            print('请输入验证码...')
            while True:
                if self.driver.url != self.initMy_url:
                    sleep(1)
                else:
                    break
        # 买票功能实现
        def start_buy(self):
            self.driver = Browser(driver_name=self.driver_name, executable_path=self.executable_path)
            #窗口大小的操作
            self.driver.driver.set_window_size(700, 500)
            self.login()
            self.driver.visit(self.ticket_url)
            try:
                print('开始购票...')
                # 加载查询信息
                self.driver.cookies.add({"_jc_save_fromStation": self.starts})
                self.driver.cookies.add({"_jc_save_toStation": self.ends})
                self.driver.cookies.add({"_jc_save_fromDate": self.dtime})
                self.driver.reload()
                count = 0
                if self.order != 0:
                    while self.driver.url == self.ticket_url:
                        self.driver.find_by_text('查询').click()
                        count += 1
                        print('第%d次点击查询...' % count)
                        try:
                            self.driver.find_by_text('预订')[self.order-1].click()
                            sleep(1.5)
                        except Exception as e:
                            print(e)
                            print('预订失败...')
                            continue
                else:
                    while self.driver.url == self.ticket_url:
                        self.driver.find_by_text('查询').click()
                        count += 1
                        print('第%d次点击查询...' % count)
                        try:
                            for i in self.driver.find_by_text('预订'):
                                i.click()
                                sleep(1)
                        except Exception as e:
                            print(e)
                            print('预订失败...')
                            continue
                print('开始预订...')
                sleep(1)
                print('开始选择用户...')
                for p in self.passengers:
    
                    self.driver.find_by_text(p).last.click()
                    sleep(0.5)
                    if p[-1] == ')':
                        self.driver.find_by_id('dialog_xsertcj_ok').click()
                print('提交订单...')
                # sleep(1)
                # self.driver.find_by_text(self.pz).click()
                # sleep(1)
                # self.driver.find_by_text(self.xb).click()
                # sleep(1)
                self.driver.find_by_id('submitOrder_id').click()
                sleep(2)
                print('确认选座...')
                self.driver.find_by_id('qr_submit_id').click()
                print('预订成功...')
            except Exception as e:
                print(e)
    
    
    
    
    if __name__ == '__main__':
        # 用户名
        username = 'xxxx'
        # 密码
        password = 'xxx'
        # 车次选择,0代表所有车次
        order = 2
        # 乘客名,比如passengers = ['丁小红', '丁小明']
        # 学生票需注明,注明方式为:passengers = ['丁小红(学生)', '丁小明']
        passengers = ['丁彦军']
        # 日期,格式为:'2018-01-20'
        dtime = '2018-01-19'
        # 出发地(需填写cookie值)
        starts = '%u5434%u5821%2CWUY' #吴堡
        # 目的地(需填写cookie值)
        ends = '%u897F%u5B89%2CXAY' #西安
    
        # xb =['硬座座'] 
        # pz=['成人票']
    
    
        Buy_Tickets(username, password, order, passengers, dtime, starts, ends).start_buy()

    好了,言归正传,之前那篇博文贴出了报错,原因不在于防火墙等等,而在于chromedriver版本没有下载对,参考并下载:

    http://blog.csdn.net/huilan_same/article/details/51896672,我的chrome浏览器是63的版本,百度了一下,说是要装2.34的版本,参考如下:

    https://www.cnblogs.com/fangfangs/p/6265570.html

    http://blog.csdn.net/u012246342/article/details/52860949

    简单来说搭建selenium+chrome浏览器的python环境需要如下步骤:

    首先已经安装好selenium,然后下载对应版本的chromedriver,然后放到1、GoogleChromeApplication;2、Python36Scripts这两个目录下,再把1的路径添加到环境变量path里,接着测试一下

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")

    可以看到顺利打开了百度页面,测试完毕

    人生苦短,何不用python
  • 相关阅读:
    Microsoft Visual Studio 2005中使用水晶报表
    net的辅助工具列表
    基于.net开发平台项目案例集锦
    一个蛮不错的图形绘制控件 dotnetCHARTING
    统计图控件dotnetCharting和ZedGraph比较
    c#获取真实IP和代理IP
    虚拟主机比较安全设置
    正则表达式 大杂烩
    【转载】说说大型高并发高负载网站的系统架构
    使用.NET实现断点续传
  • 原文地址:https://www.cnblogs.com/yqpy/p/8306066.html
Copyright © 2011-2022 走看看