繁体   English   中英

当作为www-data运行时,为什么input.send_keys()在我的Selenium WebDriver Python脚本中不起作用?

[英]Why doesn’t input.send_keys() work in my Selenium WebDriver Python script when run as www-data?

我有一个Python脚本,它使用Selenium WebDriver (以PyVirtualDisplay作为显示)登录Flickr。

当我在Debian服务器上以自己的身份运行它时,它运行正常。 (我是一个sudoer,但我在运行脚本时不使用sudo。)

当我以用户www-data运行它时(最终它会运行它,因为我想从Django网站触发它),我遇到两个问题,一个很小,一个很大:

  1. (小): webdriver.Firefox()调用返回需要30-45秒,相比之下我自己运行2秒
  2. (大):脚本无法登录Flickr。 为了登录,我在Flickr登录页面(http://www.flickr.com/signin/)上找到用户名和密码字段,并使用element.send_keys()输入用户名和密码。 虽然Selenium似乎找到了元素(即没有抛出NoSuchElementException ),但是当脚本作为www-data运行时,不会在字段中输入值(根据我使用browser.save_screenshot截取的屏幕截图),这与脚本不同像我一样奔跑。

当脚本作为www-data运行时,为什么send_keys()不起作用? (它与浏览器开始需要更长的时间有关吗?)

也许你的环境有不同的东西。

尝试通过示例复制/home/www-data ~/.bashrc

如果还不够,请将此命令作为当前用户和www-data

strace -tt -f -s 1000 -o /tmp/trace ./script.py

并在某处粘贴它(过滤掉您的登录名/密码)。

我们将看到发生了什么。

有时,Firefox会在启动时执行一些讨厌的插件兼容性检查。 由于每个用户都可以拥有一组不同的浏览器插件,因此可能会导致启动时间不同。 您可以尝试在用户之间同步Firefox配置文件。

那么,你确定Firefox作为用户www-data有适当的网络/互联网访问? 你能确认通过SeleniumHQ正确加载Flickr网站吗? 脚本无法登录Flickr ”太不准确了。 关于失败原因的更多细节可能会立即揭示问题。

编辑:对不起,我只是明白配置文件应该没有区别,因为Selenium会创建一个。 不过,我的第二点可能有用,所以我不会删除这个答案。

还有一些值得思考的事情:

  • 你可以从www-data账户手动生成一次firefox并确保Firefox在每次执行脚本之前都没有更新自己吗? 我曾经在Windows上使用Selenium RC遇到这个问题,并且必须在使用更新的二进制文件启动脚本之前完成更新。

  • 作为一种解决方法,我想您可以尝试将脚本作为www-data用户运行,但远程连接到在登录中运行的webdriver服务器(也称为“网格”模式)。 这对你有用吗?

我建议从谷歌获取最新的chrome并在该浏览器中尝试输入input.send_keys()。

有时webdriver的某些功能会被新版本破坏。如果你一直想用firefox进行测试,那么你可能会更好地使用旧版/更新版本的selenium webdriver。

我记得在mac上有一个关于send_keys()的类似问题。我的问题是在我更新了selenium webdriver后,send_keys()在某些模态窗口中无效..我通过恢复到我知道工作的旧webdriver来修复它。 但是,我使用Ruby而不是Python来驱动webdriver。

有时,如果您将shell用作其他用户,则在shell中获取正确的ENV变量可能也存在问题。 我建议尝试进行故障排除,看看是否在www-data下正确设置了所有shell ENV变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM