Python在使用Selenium Web驱动时调用32位X11库文件而非64位

2 投票
2 回答
1574 浏览
提问于 2025-04-17 08:53

我在一台运行CentOS 5.5 x86_64系统的机器上安装了Python 2.7。

$ file /opt/python2.7.1/bin/python

/opt/python2.7.1/bin/python: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

然后我尝试用Selenium Web Driver运行一个基本的登录脚本,但出现了以下错误。

selenium.common.exceptions.WebDriverException: Message: 'The browser appears to have exited before we could connect. The output was: Failed to dlopen /usr/lib/libX11.so.6\ndlerror says: /usr/lib/libX11.so.6: wrong ELF class: ELFCLASS32\n'

为什么它使用的是32位的X11库,而不是64位的X11库?我该如何让Python使用64位的库呢?

2 个回答

0

我遇到了差不多一样的问题,不过我找到了一种虽然不太优雅但有效的解决办法:

我的错误信息:

文件 "/usr/lib/python2.7/site-packages/selenium/webdriver/firefox/firefox_binary.py" 的第81行,出错原因是 _wait_until_connectable 方法中,调用了 self._get_firefox_output(),结果出现了这个错误:selenium.common.exceptions.WebDriverException: 消息:'浏览器似乎在我们连接之前就退出了。输出信息是:Xlib: 在显示 ":1023.0" 上缺少扩展 "RANDR"。\n无法打开 /usr/lib/libX11.so.6,错误信息是:/usr/lib/libX11.so.6: 错误的 ELF 类别: ELFCLASS32\n'

我的环境配置:
Fedora 14 X64
Firefox: 3.6.24 X64
Selenium 2.20.0 (webdriver)

我这个虽然丑陋但简单有效的解决办法是:
我把这个文件复制了过来:
/usr/lib/python2.7/site-packages/selenium/webdriver/firefox/x86/x_ignore_nofocus.so
复制到这里:
/usr/lib/python2.7/site-packages/selenium/webdriver/firefox/amd64/
(注意,建议你先备份原文件,以防这个方法不适合你)

2

我在Scientific Linux 6上遇到了同样的错误,尝试按照这里的描述更改库文件:http://code.google.com/p/selenium/issues/detail?id=2852

在64位的Firefox和x_ignore_nofocus组合下出现失败,原因是:在64位模式下,库文件x_ignore_nofocus正在寻找路径为"/usr/lib/libX11.so.6"的libX11.so.6文件。但是这个符号链接/usr/lib/libX11.so.6实际上指向的是/usr/lib/libX11.so.6.2.0,而这个是32位的库文件。

我更改链接没有成功,但我没有尝试修补selenium。希望下一个版本能解决这个问题。

撰写回答