环境

win64位,python3.6,

问题与解决

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

  1. from splinter.browser import Browser
  2. from time import sleep
  3. import traceback
  4.  
  5. class Buy_Tickets(object):
  6. # 定义实例属性,初始化
  7. def __init__(self, username, passwd, order, passengers, dtime, starts, ends):
  8. self.username = username
  9. self.passwd = passwd
  10. # 车次,0代表所有车次,依次从上到下,1代表所有车次,依次类推
  11. self.order = order
  12. # 乘客名
  13. self.passengers = passengers
  14. # 起始地和终点
  15. self.starts = starts
  16. self.ends = ends
  17. # 日期
  18. self.dtime = dtime
  19. # self.xb = xb
  20. # self.pz = pz
  21. self.login_url = 'https://kyfw.12306.cn/otn/login/init'
  22. self.initMy_url = 'https://kyfw.12306.cn/otn/index/initMy12306'
  23. self.ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
  24. self.driver_name = 'chrome'
  25. self.executable_path = 'C:\Program Files\Python36\ChromeDriver.exe'
  26. # 登录功能实现
  27. def login(self):
  28. self.driver.visit(self.login_url)
  29. self.driver.fill('loginUserDTO.user_name', self.username)
  30. # sleep(1)
  31. self.driver.fill('userDTO.password', self.passwd)
  32. # sleep(1)
  33. print('请输入验证码...')
  34. while True:
  35. if self.driver.url != self.initMy_url:
  36. sleep(1)
  37. else:
  38. break
  39. # 买票功能实现
  40. def start_buy(self):
  41. self.driver = Browser(driver_name=self.driver_name, executable_path=self.executable_path)
  42. #窗口大小的操作
  43. self.driver.driver.set_window_size(700, 500)
  44. self.login()
  45. self.driver.visit(self.ticket_url)
  46. try:
  47. print('开始购票...')
  48. # 加载查询信息
  49. self.driver.cookies.add({"_jc_save_fromStation": self.starts})
  50. self.driver.cookies.add({"_jc_save_toStation": self.ends})
  51. self.driver.cookies.add({"_jc_save_fromDate": self.dtime})
  52. self.driver.reload()
  53. count = 0
  54. if self.order != 0:
  55. while self.driver.url == self.ticket_url:
  56. self.driver.find_by_text('查询').click()
  57. count += 1
  58. print('第%d次点击查询...' % count)
  59. try:
  60. self.driver.find_by_text('预订')[self.order-1].click()
  61. sleep(1.5)
  62. except Exception as e:
  63. print(e)
  64. print('预订失败...')
  65. continue
  66. else:
  67. while self.driver.url == self.ticket_url:
  68. self.driver.find_by_text('查询').click()
  69. count += 1
  70. print('第%d次点击查询...' % count)
  71. try:
  72. for i in self.driver.find_by_text('预订'):
  73. i.click()
  74. sleep(1)
  75. except Exception as e:
  76. print(e)
  77. print('预订失败...')
  78. continue
  79. print('开始预订...')
  80. sleep(1)
  81. print('开始选择用户...')
  82. for p in self.passengers:
  83.  
  84. self.driver.find_by_text(p).last.click()
  85. sleep(0.5)
  86. if p[-1] == ')':
  87. self.driver.find_by_id('dialog_xsertcj_ok').click()
  88. print('提交订单...')
  89. # sleep(1)
  90. # self.driver.find_by_text(self.pz).click()
  91. # sleep(1)
  92. # self.driver.find_by_text(self.xb).click()
  93. # sleep(1)
  94. self.driver.find_by_id('submitOrder_id').click()
  95. sleep(2)
  96. print('确认选座...')
  97. self.driver.find_by_id('qr_submit_id').click()
  98. print('预订成功...')
  99. except Exception as e:
  100. print(e)
  101.  
  102. if __name__ == '__main__':
  103. # 用户名
  104. username = 'xxxx'
  105. # 密码
  106. password = 'xxx'
  107. # 车次选择,0代表所有车次
  108. order = 2
  109. # 乘客名,比如passengers = ['丁小红', '丁小明']
  110. # 学生票需注明,注明方式为:passengers = ['丁小红(学生)', '丁小明']
  111. passengers = ['丁彦军']
  112. # 日期,格式为:'2018-01-20'
  113. dtime = '2018-01-19'
  114. # 出发地(需填写cookie值)
  115. starts = '%u5434%u5821%2CWUY' #吴堡
  116. # 目的地(需填写cookie值)
  117. ends = '%u897F%u5B89%2CXAY' #西安
  118.  
  119. # xb =['硬座座']
  120. # pz=['成人票']
  121.  
  122. 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、\Google\Chrome\Application;2、\Python36\Scripts这两个目录下,再把1的路径添加到环境变量path里,接着测试一下

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

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

python使用selenium安装chromedriver的问题的更多相关文章

  1. python+ubuntu+selenium安装chrome和chromedriver

    请确保selenium已经安装成功,没安装的可以pip install selenium 安装chrome 在终端输入 下载安装包 wget https://dl.google.com/linux/d ...

  2. UI自动化(selenium+python)之浏览器驱动chromedriver安装和配置

    一.安装selenium 前提是已安装Python,python安装 自行百度,这里不概述 安装好python后,cmd打开终端窗口-->pip命令安装 :pip install seleniu ...

  3. 在Centos7上安装Python+Selenium+Chrome+Chromedriver

    1.下载Chrome 上一篇文章已经演示过了Python+Selenium+Firefox+Geckodriver安装步骤并通过自动化脚本打开百度 因此当前只需要安装Chrome和Chromedriv ...

  4. python selenium 安装与 chromedriver安装

    安装 pip install selenium 安装完成之后运行脚本,如果没报错那ok.但是很不幸运,我报错啦.(本人使用ubuntu16.04,python2,or python3) 贴出我的报错: ...

  5. ubuntu下的python请求库的安装——Selenium,ChromeDriver,GeckoDriver,PhantomJS,aiohttp

    Selenium安装: pip3 install selenium ChromeDriver安装: 在这链接下载对应版本:https://chromedriver.storage.googleapis ...

  6. Python+Selenium安装及环境配置

    一.Python安装 Window系统下,python的安装很简单.访问python.org/download,下载最新版本,安装过程与其他windows软件类似.记得下载后设置path环境变量,然后 ...

  7. 吾八哥学Selenium(一):Python下的selenium安装

    selenium简介 Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mo ...

  8. 安装selenium和chromedriver

    网上找的算法,在运行爬虫代码时,需要Selenium+Phantomjs实现,我改成了用Selenium+Chrome:针对指定网址,自动打开浏览器,输入关键词搜索,并保存搜索的内容. 1. 安装se ...

  9. Python:Selenium+Webdriver安装

    本人小白一枚,今天在使用selenium+webdriver的时候遇到了一个小问题: WebDriverException: 'chromedriver' executable needs to be ...

随机推荐

  1. java多线程有哪些实际的应用场景?

    多线程使用的主要目的在于: 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的.简单的说,可能就是一个请求一个线程.或多个请求一个线程.如果是单线程,那同时只能处理一个用户的请求. ...

  2. GIS中栅格数据结构的显示与计算

    在GIS中,根据数据存储的表现形式不同,通常将空间数据分为矢量数据和栅格数据.最简单的区别是:当栅格数据放大到一定程度时,就会呈现出我们熟悉的讨厌的"马赛克". 栅格数据存储 最简 ...

  3. Hbase 命令小结

    1.创建test,如果存在先删除 hbase(main)::> disable 'test' row(s) in 1.4250 seconds hbase(main)::> drop 't ...

  4. python 网络工具 scapy 介绍

    作者介绍,这是个万能的网络工具,除了可以查看 TCP/IP 各层的报文,还可以发送报文.可以说是一个万能工具,作者嚣张的说, “it can replace hping, 85% of nmap, a ...

  5. JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...

  6. supervisor //todo

    #安装easy-installyum install python-setuptools #安装 supervisoreasy_install supervisor #创建主配置文件echo_supe ...

  7. MySQL参数:innodb_flush_log_at_trx_commit 和 sync_binlog

    innodb_flush_log_at_trx_commit 和 sync_binlog 是 MySQL 的两个配置参数,前者是 InnoDB 引擎特有的.之所以把这两个参数放在一起讨论,是因为在实际 ...

  8. Swift ARC 自动引用计数

    1.ARC 引用类型在堆上的内存分配过程中有 8 字节的地址长度用来保存对象的引用计数,堆上的内存并不像栈上那样立即进行回收,系统会定时对堆上的内存进行检查,当某个实例不再被使用时,引用计数会变为 0 ...

  9. 浅谈MySQL备份字符集的问题

    1 引子 MySQL备份时选择字符集是一个难题,特别是字符集不定的业务.mysqldump默认使用utf8,而官方也推荐使用utf8.但实际上,对于中文,部分相当一部分gbk编码字符没有对应的unic ...

  10. Java socket保存示例(不使用base64)解决中文乱码问题

    MultiThreadServer.java package com.my.nubase64; import java.io.BufferedReader; import java.io.Buffer ...