Python中的Selenium

9 投票
3 回答
5231 浏览
提问于 2025-04-16 13:01

我一直在用urllib2来访问网页,但它不支持javascript,所以我去看看Selenium,但即使看了它的文档,我还是有点困惑。

我下载了Selenium IDE这个Firefox的插件,尝试了一些简单的操作。

from selenium import selenium
import unittest, time, re

class test(unittest.TestCase):
    def setUp(self):
        self.verificationErrors = []
        self.selenium = selenium("localhost", 4444, "*chrome", "http://www.wikipedia.org/")
        self.selenium.start()

    def test_test(self):
        sel = self.selenium
        sel.open("/")
        sel.type("searchInput", "pacific ocean")
        sel.click("go")
        sel.wait_for_page_to_load("30000")

    def tearDown(self):
        self.selenium.stop()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

我只是访问了wikipedia.org,然后在搜索框里输入“太平洋”,但是当我尝试编译的时候,出现了很多错误。

3 个回答

-1

在我的项目中遇到了这个问题,发现问题出在几个webdriver.get的调用之间时间间隔太短。我解决的方法不是加延迟,而是直接去掉那些不必要的调用,这样错误就消失了。希望这对某些人有帮助。

1

我建议你使用一个叫做webdriver的工具,你可以在这里找到它:http://code.google.com/p/selenium/downloads/list。如果你想像程序员一样写测试,而不是用鼠标去操作,这个工具会比你现在尝试使用的RC版本更好用。至少,它不会要求你提供一个SeleniumRC的Jar文件。你只需要一个浏览器的可执行文件,或者使用你电脑上已经安装的浏览器,比如Firefox。

6

如果运行脚本时出现了 [Errno 111] Connection refused 这样的错误:

% test.py
E
======================================================================
ERROR: test_test (__main__.test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/unutbu/pybin/test.py", line 11, in setUp
    self.selenium.start()
  File "/data1/unutbu/pybin/selenium.py", line 189, in start
    result = self.get_string("getNewBrowserSession", [self.browserStartCommand, self.browserURL, self.extensionJs])
  File "/data1/unutbu/pybin/selenium.py", line 219, in get_string
    result = self.do_command(verb, args)
  File "/data1/unutbu/pybin/selenium.py", line 207, in do_command
    conn.request("POST", "/selenium-server/driver/", body, headers)
  File "/usr/lib/python2.6/httplib.py", line 898, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.6/httplib.py", line 935, in _send_request
    self.endheaders()
  File "/usr/lib/python2.6/httplib.py", line 892, in endheaders
    self._send_output()
  File "/usr/lib/python2.6/httplib.py", line 764, in _send_output
    self.send(msg)
  File "/usr/lib/python2.6/httplib.py", line 723, in send
    self.connect()
  File "/usr/lib/python2.6/httplib.py", line 704, in connect
    self.timeout)
  File "/usr/lib/python2.6/socket.py", line 514, in create_connection
    raise error, msg
error: [Errno 111] Connection refused

----------------------------------------------------------------------
Ran 1 test in 0.063s

FAILED (errors=1)

那么解决办法很可能是你需要先启动 selenium 服务器。

SeleniumRC 的下载包里,你会找到一个叫做 selenium-server.jar 的文件(几个月前,这个文件的位置是 SeleniumRC/selenium-server-1.0.3/selenium-server.jar)。

在 Linux 系统上,你可以用下面的命令在后台运行 selenium 服务器:

java -jar /path/to/selenium-server.jar 2>/dev/null 1>&2 &

你可以在 这里 找到更详细的服务器设置说明。

撰写回答