【问题标题】:Python selenium gets 111 socket errorPython selenium 得到 111 套接字错误
【发布时间】:2013-08-12 13:08:47
【问题描述】:

我只是从这里运行 selenium 的示例代码:

http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html

代码是:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://www.yahoo.com") # Load page
try:
    browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]")
except NoSuchElementException:
    assert 0, "can't find seleniumhq"
browser.close()

但这对我不起作用,这是它的响应:

 Traceback (most recent call last):
  File "test.py", line 4, in <module>
    driver = webdriver.Firefox()
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 62, in __init__
    desired_capabilities=capabilities)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 72, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 114, in start_session
    'desiredCapabilities': desired_capabilities,
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 165, 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: Message:
...
<div id="content">
<p>The following error was encountered while trying to retrieve the URL: <a href="http://127.0.0.1:60106/hub/session">http://127.0.0.1:60106/hub/session</a></p>

<blockquote id="error">
<p><b>Connection to 127.0.0.1 failed.</b></p>
</blockquote>

<p id="sysmsg">The system returned: <i>(111) Connection refused</i></p>

<p>The remote host or network may be down. Please try the request again.</p>
...

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    您没有运行完整的示例。您发布的链接包含以下代码:

    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from selenium.webdriver.common.keys import Keys
    import time
    
    browser = webdriver.Firefox() # Get local session of firefox
    browser.get("http://www.yahoo.com") # Load page
    assert "Yahoo!" in browser.title
    elem = browser.find_element_by_name("p") # Find the query box
    elem.send_keys("seleniumhq" + Keys.RETURN)
    time.sleep(0.2) # Let the page load, will be added to the API
    try:
        browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]")
    except NoSuchElementException:
        assert 0, "can't find seleniumhq"
    browser.close()
    

    这很好用。 您问题中代码的编辑版本缺少某些部分,因此失败。具体来说,您缺少以下两行:

    elem = browser.find_element_by_name("p") # Find the query box
    elem.send_keys("seleniumhq" + Keys.RETURN)
    

    这会启动 Yahoo 搜索“seleniumhq”。该搜索的结果就是您要在其中找到元素的内容。

    如果您不进行搜索,它将失败:

    browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]")
    

    【讨论】:

    • 我已经尝试了完整的示例,但也没有。我认为问题是我没有引用127.0.0.1,但错误表明它正在尝试到达127.0.0.1:xxxxx
    • @MrRoy:很有趣。您的网络连接是否有可能使用代理服务器(“HTTP_PROXY”环境变量),或者您在本地计算机上运行了防火墙?
    • 是的,我在内部网络中,当然我们有防火墙,但据我所知,防火墙没有阻止任何网站...
    • 我的意思是在您正在运行的机器上的本地防火墙......不仅仅是在公司防火墙后面。嗯.. 127.0.0.1 是您的本地环回地址。我将首先验证这一点。
    【解决方案2】:

    当 Selenium 使用

    启动 Firefox
    browser = webdriver.Firefox()
    

    它访问的第一个地址是 localhost - 127.0.0.1:xxxxx

    如果您使用代理服务器,则无法使用代理集访问本地主机。 因此,首先您需要使用以下命令关闭代理:

    unset http_proxy
    unset ftp_proxy
    unset socks_proxy
    unset https_proxy
    

    关闭代理后,您的 Firefox 应该可以正常启动。但是现在您需要在 Firefox 上设置代理。 here 描述的技术有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-31
      • 2013-12-19
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 2018-10-30
      • 2019-11-01
      相关资源
      最近更新 更多