使用Selenium-Webdriver时,Firefox可以看到元素,而PhantomJS无法看到。

5
我已经寻找了相当长的时间,希望有人能想到一些可以帮助我的东西解决我的问题。
我有一个使用Firefox驱动程序连接到网站的工作中的selenium脚本(用Python编写)。当使用PhantomJS作为驱动程序时,它就不再起作用了。
表单由JavaScript生成,并位于https网站上。下面是用户输入的代码:
<script language="JavaScript1.2">
document.writeln("<input class=\"textform\" type=\"text\" id=\"user\" name=\"user\" size=\"" + size + "\" tabindex=1 onFocus=\"hadFocus(true)\">");
</script>

这是脚本中寻找它的部分代码:(在Firefox上工作但在PhantomJS上不工作)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Firefox()

driver.get([MY URL])

print driver.page_source

driver.find_element_by_id("user").clear()
driver.find_element_by_id("user").send_keys([MY USER ID])
driver.find_element_by_id("pass").clear()
driver.find_element_by_id("pass").send_keys([MY PASS])
driver.find_element_by_name("login_btn").click()

html_source = driver.page_source

print html_source

driver.close()

以下是我收到的错误信息:

selenium.common.exceptions.NoSuchElementException

如果我在到达页面后立即打印page_source,Firefox会显示正确的源代码,而PhantomJS只有:<html><head></head><body></body></html>。您认为可能是什么原因引起的?

1
你能展示一下代码样例吗,而不仅仅是元素?你使用的是Python还是Java?我认为selenium没有Javascript绑定。 - Malik Brahimi
错误意味着没有标签可以被提取。如果标签在其中,您可以编写“page_source”并手动检查它。 - nickanor
我已经编辑了代码示例。我还尝试使用按名称和xpath查找元素。在Firefox中两者都可以工作,但在PhantomJS中不行。(使用Python) - zigoingoin
我尝试在页面到达后立即打印 page_source。实际上,Firefox 显示了正确的源代码,而 PhantomJS 只有:<html><head></head><body></body></html> - zigoingoin
我使用完整的脚本进行了编辑。确实是一个https网站。 谢谢您的评论! - zigoingoin
1个回答

5

感谢Artjom B.的答案,我已经解决了我的问题:

只需要修改代码中的以下内容:

driver = webdriver.PhantomJS(service_args=['--ignore-ssl-errors=true'])

我猜这是由于SSL证书造成的。

1
您可以提供一个参考链接,以便查看您得到答案的来源。 - Artjom B.
有点离题:如果您正在运行一个无头PhantomJS webdriver,请在启动服务器时使用此命令:即phantomjs --webdriver=8643 --ignore-ssl-errors=true对我来说,这解决了我在针对带有自签名证书的https基本url运行Behat测试时遇到的Mink ElementNotFoundException错误。 - aaronbauman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接