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 Files\Python36\ChromeDriver.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、\Google\Chrome\Application;2、\Python36\Scripts这两个目录下,再把1的路径添加到环境变量path里,接着测试一下
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get("http://www.baidu.com")
可以看到顺利打开了百度页面,测试完毕
python使用selenium安装chromedriver的问题的更多相关文章
- python+ubuntu+selenium安装chrome和chromedriver
请确保selenium已经安装成功,没安装的可以pip install selenium 安装chrome 在终端输入 下载安装包 wget https://dl.google.com/linux/d ...
- UI自动化(selenium+python)之浏览器驱动chromedriver安装和配置
一.安装selenium 前提是已安装Python,python安装 自行百度,这里不概述 安装好python后,cmd打开终端窗口-->pip命令安装 :pip install seleniu ...
- 在Centos7上安装Python+Selenium+Chrome+Chromedriver
1.下载Chrome 上一篇文章已经演示过了Python+Selenium+Firefox+Geckodriver安装步骤并通过自动化脚本打开百度 因此当前只需要安装Chrome和Chromedriv ...
- python selenium 安装与 chromedriver安装
安装 pip install selenium 安装完成之后运行脚本,如果没报错那ok.但是很不幸运,我报错啦.(本人使用ubuntu16.04,python2,or python3) 贴出我的报错: ...
- ubuntu下的python请求库的安装——Selenium,ChromeDriver,GeckoDriver,PhantomJS,aiohttp
Selenium安装: pip3 install selenium ChromeDriver安装: 在这链接下载对应版本:https://chromedriver.storage.googleapis ...
- Python+Selenium安装及环境配置
一.Python安装 Window系统下,python的安装很简单.访问python.org/download,下载最新版本,安装过程与其他windows软件类似.记得下载后设置path环境变量,然后 ...
- 吾八哥学Selenium(一):Python下的selenium安装
selenium简介 Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mo ...
- 安装selenium和chromedriver
网上找的算法,在运行爬虫代码时,需要Selenium+Phantomjs实现,我改成了用Selenium+Chrome:针对指定网址,自动打开浏览器,输入关键词搜索,并保存搜索的内容. 1. 安装se ...
- Python:Selenium+Webdriver安装
本人小白一枚,今天在使用selenium+webdriver的时候遇到了一个小问题: WebDriverException: 'chromedriver' executable needs to be ...
随机推荐
- java多线程有哪些实际的应用场景?
多线程使用的主要目的在于: 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的.简单的说,可能就是一个请求一个线程.或多个请求一个线程.如果是单线程,那同时只能处理一个用户的请求. ...
- GIS中栅格数据结构的显示与计算
在GIS中,根据数据存储的表现形式不同,通常将空间数据分为矢量数据和栅格数据.最简单的区别是:当栅格数据放大到一定程度时,就会呈现出我们熟悉的讨厌的"马赛克". 栅格数据存储 最简 ...
- Hbase 命令小结
1.创建test,如果存在先删除 hbase(main)::> disable 'test' row(s) in 1.4250 seconds hbase(main)::> drop 't ...
- python 网络工具 scapy 介绍
作者介绍,这是个万能的网络工具,除了可以查看 TCP/IP 各层的报文,还可以发送报文.可以说是一个万能工具,作者嚣张的说, “it can replace hping, 85% of nmap, a ...
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践
任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...
- supervisor //todo
#安装easy-installyum install python-setuptools #安装 supervisoreasy_install supervisor #创建主配置文件echo_supe ...
- MySQL参数:innodb_flush_log_at_trx_commit 和 sync_binlog
innodb_flush_log_at_trx_commit 和 sync_binlog 是 MySQL 的两个配置参数,前者是 InnoDB 引擎特有的.之所以把这两个参数放在一起讨论,是因为在实际 ...
- Swift ARC 自动引用计数
1.ARC 引用类型在堆上的内存分配过程中有 8 字节的地址长度用来保存对象的引用计数,堆上的内存并不像栈上那样立即进行回收,系统会定时对堆上的内存进行检查,当某个实例不再被使用时,引用计数会变为 0 ...
- 浅谈MySQL备份字符集的问题
1 引子 MySQL备份时选择字符集是一个难题,特别是字符集不定的业务.mysqldump默认使用utf8,而官方也推荐使用utf8.但实际上,对于中文,部分相当一部分gbk编码字符没有对应的unic ...
- Java socket保存示例(不使用base64)解决中文乱码问题
MultiThreadServer.java package com.my.nubase64; import java.io.BufferedReader; import java.io.Buffer ...