Selenium+Python学习之一

刚入门selenium+Python,实验成功之后,记录一下过程。

首先是在知乎上面看到一个关于selenium+python的示例,于是自己便尝试搭建环境上手实验。

按照作者的代码敲一遍之后执行,竟然报错了~

代码如下:

# coding=utf-8
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://zhihu.com")
browser.close()  

然后运行,竟然报错了。

其实上面代码没有问题,但是,我想通过API来熟悉一下webdriver,于是在WebDriver API上面查看:http://selenium-python.readthedocs.io/api.html

按照API示例编写代码如下:

# coding=utf-8
from selenium.webdriver import Firefox
from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener
class MyListener(AbstractEventListener):
    def before_navigate_to(self, url, driver):
        print("Before navigate to %s" % url)
    def after_navigate_to(self, url, driver):
        print("After navigate to %s" % url)

driver = Firefox()
ef_driver=EventFiringWebDriver(driver,MyListener())
ef_driver.get("http://zhihu.com")

assert "TestArt" in ef_driver.title

ef_driver.close()

执行之后,错误如下:selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

查找到一篇已经解决改问题的文章:http://www.cnblogs.com/yousuosiyss/p/6882420.html

摘选其中一种方式【下载geckodriver.exe】,步骤如下:

1.下载地址:https://github.com/mozilla/geckodriver/releases,根据自己的电脑,下载的win64位的;

2.在firefox的安装目录下,解压geckodriver,然后将该路径添加到path环境变量下,不报这个错了;

3.但是,报了一个新的错“selenium.common.exceptions.WebDriverException: Message: Unable to find a matching set of capabilities”;

4.继续网上查,原因是,我下载的geckodriver是V0.16.1版本的,这个版本和selenium3.4.2不兼容,需要使用deckdriverV0.15的版本;

5.重新下载了deckodriverV0.15的版本,ok了,不报这个错了,但是,又报了一个新的错“selenium.common.exceptions.WebDriverException: Message: Unsupported Marionette protocol version 2, required 3;

6.继续往上查原因,说是firefox版本太低了,需要升级到最新版,ok,更新firefox,问题解决。

其实按照作者的分享,很快便能解决该问题,但是,我按照作者的方式正常操作下来,仍然报一开始的错,各种尝试未果,然后在网上搜索他人的经验分享,才终于解决了这个问题。

以下则是尝试未果的补充:

步骤2,是将firefox的安装目录添加到path环境变量中,添加完成之后,如果仍报一样的错误,重启cmd与IDE,一般就正常了,如果还有作者所述的错误,可以继续按照作者的上述步骤操作。

以上即为小小心得,记录一下。