原文学习网址
我的Mac调试环境:Python2.7.12且已安装selenuim库
脚本:
# coding = utf-8
from selenium import webdriver
import time #调入time函数
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
time.sleep(0.3) #休眠0.3秒
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3) # 休眠3秒
browser.quit()
运行结果:
分析:
虽然selenium webdriver默认安装的是Firefox的驱动,但是对浏览器版本限制很大,只有低版本的Firefox可以运行,而在Firefox高版本需要使用 geckodriver 来驱动,不再使用Selenium默认自带的Firefox webdriver。
网上解决办法:
需要手动下载 geckodriver 并将其所在的路径设为环境变量(或者把geckodriver.exe扔到python安装目录下,跟python.exe同级目录)。
PS:这个说的应该是针对Windows系统的,MAC系统可以借鉴。
【划重点】然后我放弃了Firefox,选择了Google Chrome。
脚本:
import os
from selenium import webdriver
import time
chromedriver = "/usr/local/bin/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get("http://baidu.com")
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(1)
driver.quit()
重点说明:
与高版本Firefox需要geckodriver驱动类似,webdriver没法实现chromedriver,在chrome浏览器上运行测试脚本时,首先需要下载chromedriver,这个程序是由谷歌团队提供的,你可以把它看作是连接webdriver和chrome浏览器的桥梁。
在Mac中安装chromedriver:
我的步骤:
① 安装homebrew:homebrew
② 安装chromedriver:在终端输入“brew install chromedriver”
关键代码解释:
chromedriver = "/usr/local/bin/chromedriver"
这一句表明chromedriver的安装路径。这个路径我搞了好半天才整出来,在采用上述介绍的方法安装了chromedriver之后,我根本在电脑上找不到它。
事实上,Mac下/usr/local目录默认对于finder是隐藏的,如果需要到/usr/local下:
方法①:终端命令后(见下图)重启电脑。
方法②:打开finder,然后使用command+shift+G,在弹出的目录中填写/usr/local就可以了。
os.environ["webdriver.chrome.driver"] = chromedriver
environ是一个字符串所对应环境的映像对象。具体怎么解释我真不太懂,暂且当做把chromedriver的路径地址告诉了webdriver,架起了webdriver和chrome之间的桥梁吧。。。
至此,才保证了可以用chrome浏览器进行自动操作。
最后,巩固一下其它语句的具体意思:
driver = webdriver.Chrome(chromedriver)
//操控的是chrome浏览器。
driver.get(“http://baidu.com“)
//打开百度页面
driver.find_element_by_id(“kw”).send_keys(“selenium”)
//一个控件有若干属性id 、name、(也可以用其它方式定位),百度输入框的id 叫kw ,我要在输入框里输入 selenium 。
driver.find_element_by_id(“su”).click()
//搜索的按钮的id 叫su ,我需要点一下按钮( click() )。
driver.quit()
//退出并关闭窗口的每一个相关的驱动程序,它还有个类似的表弟。
browser.close()
//关闭当前窗口 ,用哪个看你的需求了。