0

我在带有 Firefox 25 的 Ubuntu 13.04 上安装了 Python 2.7.4 和 selenium 绑定(通过“pip install selenium”安装)。我有 PyCharm Community Edition 3.0.1 我在代理后面。我有一个非常简单的 python 测试 test_selenium.py:

from selenium import webdriver
browser = webdriver.Firefox()
browser.get("seleniumhq.org/")

当我尝试从 PyCharm 运行上述内容时,会启动 Firefox 浏览器,但地址栏中没有显示 url。而是显示以下内容:

Traceback (most recent call last):
  File "/home/nimbula/svn/nimbula/ui-selenium-tests/test-selenium.py", line 18, in <module>
    browser = webdriver.Firefox()
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 60, in __init__
    desired_capabilities=capabilities)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 71, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 113, in start_session
    'desiredCapabilities': desired_capabilities,
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 164, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 136, in check_response
    raise exception_class(value)

selenium.common.exceptions.WebDriverException:消息:u'

该消息是一个包含以下错误的 html 文件:

The proxy could not connect to the destination in time. Please verify the site you are attempting to access and retry.\n    </td>\n  </tr>\n</table>\n<!--/Content-->\n\n<!--Info-->\n<table class="infoTable">\n  <tr>\n    <td class="infoData">\n      <b>URL: </b><script type="text/javascript">break_line("http://127.0.0.1:51991/hub/session");</script>

因此从上面看起来 selenium webdriver 正在尝试访问 127.0.0.1:5199 但代理拦截了调用。我尝试了以下代码:

from selenium import webdriver

PROXY_HOST = "<corp proxy>"
PROXY_PORT = 80

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", PROXY_HOST)
profile.set_preference("network.proxy.http_port", PROXY_PORT)
profile.set_preference("network.proxy.ftp", PROXY_HOST)
profile.set_preference("network.proxy.ftp_port", PROXY_PORT)
profile.set_preference("network.proxy.ssl", PROXY_HOST)
profile.set_preference("network.proxy.ssl_port", PROXY_PORT)
profile.set_preference("network.proxy.socks", PROXY_HOST)
profile.set_preference("network.proxy.socks_port", PROXY_PORT)
profile.set_preference("network.proxy.no_proxies_on", "127.0.0.1")
profile.update_preferences()

browser = webdriver.Firefox(firefox_profile=profile)
browser.get("seleniumhq.org/")

仍然显示相同的错误。由于我打开了浏览器窗口,我检查了网络设置,它们在 python 代码中指定:127.0.0.1 显示在“无代理”框中。我还尝试了以下方法:

  1. 在 PyCharm -> Settings -> Http Proxy 中将代理设置为 None,执行不设置代理的代码。

  2. 在 PyCharm -> Settings -> Http Proxy 中将代理设置为“使用代理”,并在异常框中使用 127.0.0.1 指定所有必需的信息。

以上都没有奏效。我还尝试从命令行执行我的脚本。它仅在我首先执行“unset http_proxy”然后在没有代理设置的情况下执行脚本时才有效。如果我尝试使用代理设置,它就不再起作用了。我需要能够从 PyCharm 运行测试。因此,我的问题有两个:

  1. 如何从 PyCharm 强制没有代理(设置->代理->无不起作用)?也许,如果我在命令行上运行“unset http_proxy”,然后从同一个命令行窗口启动 PyCharm,它可能会起作用。如何从命令行启动 pycharm?'pycharm' 没有找到,/bin/pycharm 也没有找到。

  2. 如何强制 Firefox 对 selenium 进行代理设置“无”?

感谢您的任何意见。

4

1 回答 1

0

以下是我迄今为止的发现:

  1. 强制 PyCharm 不使用代理:

    一个。在命令行窗口(附件 - > 终端)中取消设置代理:

    unset http_proxy
    

    湾。从同一命令行窗口启动 pycharm:

    <install dir>/bin/pycharm.sh
    

    以上解决了我的问题。

  2. 我找不到将 Firefox 中的代理设置为 selenium/python 的“无代理”的方法。使用以下命令启动 webdirver 时:

    browser = webdriver.Firefox(proxy=None)
    

    启动的浏览器窗口没有将代理设置为“无代理”,而是设置为“使用系统代理设置”。如果有人知道从 python 以编程方式将 Firefox 代理设置为“无代理”的方法,请分享。否则,我认为这是 selenium/python 的限制。

我不确定 selenium webdriver 是如何工作的,但我猜测将浏览器的代理设置为“无代理”(如果可能的话)可能仍然无法解决上述问题。可能需要取消设置系统代理,以便 webdriver 正常工作。在 unix 上使用

unset http_proxy

在窗户上

set proxy to none from IE (that will change the system proxy).

如果有人有解释或更好的解决方案,请分享。

于 2013-11-04T23:06:14.217 回答