大家好…我正在尝试使用Selenium和PhantomJS进行无头浏览。这是登录一个论坛。
我所做的是,在FireFox中记录登录步骤,然后将其编辑为适合PhantomJS,如下所示:
driver = webdriver.PhantomJS()
base_url = "http://6atxfootball.vbulletin.net/"
verificationErrors = []
accept_next_alert = True
driver.get(base_url)
driver.find_element_by_id("lnkLoginSignupMenu").click()
driver.find_element_by_id("idLoginUserName").clear()
driver.find_element_by_id("idLoginUserName").send_keys("USERNAME_HERE")
driver.find_element_by_id("idLoginPassword").clear()
driver.find_element_by_id("idLoginPassword").send_keys("PASSWORD_HERE ")
driver.find_element_by_id("idLoginBtn").click()
它失败了,问题就在这一行,错误是"NoSuchElementException:"等。
driver.find_element_by_id("idLoginUserName").clear()
这是否意味着当PhantomJS()打开它时就没有这样的元素?还是在坚果壳里,这不是一种无头浏览的方式?
谢谢。
p.s.,所以我也尝试通过PhantomJS()将内容保存为一个文件,看看发生了什么:
driver = webdriver.PhantomJS()
base_url = "http://6atxfootball.vbulletin.net/"
verificationErrors = []
accept_next_alert = True
driver.get(base_url)
content=driver.page_source
cleaner=clean.Cleaner()
content=cleaner.clean_html(content)
with open('6atxfootball.html','w') as f:
f.write(content.encode('utf-8'))
doc=LH.fromstring(content)
"6atxfootball.html"显示没有任何表格需要填写。
我想这是因为它实际上在iframe中,所以PhantomJS在查找元素时遇到一些困难也就不足为奇了。您应该尝试直接登录iframe的url,即http://6atxfootball.vbulletin.net/auth/login-form
NoSuchElementException
表示在该页面上找不到元素。这可能意味着两件事:
- 页面上真的没有这样的元素
- 页面仍在加载,您检查得太早
很多时候,主页面会被加载,但加载其中的部分内容需要更长的时间。避免这种情况的方法是设置适当的超时。同样,你有两个选项:
- 显式等待-定义为在代码中继续执行之前等待某个条件发生
- 隐式方法-告诉WebDriver在试图查找一个或多个元素时轮询DOM一段时间(如果这些元素不能立即可用)
你可以在这里阅读更多。