2014-09-01 88 views
0

我试图连接到学校的网址并使用硒自动化过程。最初我尝试使用分裂,但遇到类似的问题。我似乎无法与用户名和密码字段进行交互。我意识到一点点,因为它是一个我需要与之交互的iframe。目前,我有:与网站表单互动

import time 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 

driver.get("https://my.oregonstate.edu/webapps/login/") 
driver.switch_to.frame('Content') #I tried contentFrame and content as well 

loginid = driver.find_elements_by_id('user_id') 
loginid.send_keys("***") 
passwd = driver.find_elements_by_id('password') 
passwd.send_keys("***") 
sub = driver.find_elements_by_id('login') 
sub.click() 
time.sleep(5) 
driver.close() 

这里是我想与之交互的HTML:

网站:https://my.oregonstate.edu/webapps/portal/frameset.jsp

的IFRAME:

<iframe id="contentFrame" style="height: 593px;" name="content" title="Content" src="/webapps/portal/execute/tabs/tabAction?tab_tab_group_id=_1_1" frameborder="0"></iframe> 

的形式:

用户名:
<input name="user_id" id="user_id" size="25" maxlength="50" type="text"> 

密码:

<input size="25" name="password" id="password" autocomplete="off" type="password"> 

看来,硒能找到的元素随便找,但我无法输入任何信息到这些领域,我得到了错误“列表对象有没有属性”。当我意识到这是我尝试导航到的iframe时,它说'无法定位帧:内容'。是否有另一个iframe我缺少?或者明显的东西?这是我第一次在这里很抱歉,如果我搞砸了代码链接。

感谢您的帮助。

回答

1

driver.switch_to.frame()采用帧的idname,你的框架具有ID = contentFrame和名称= content。 (他们没有工作的原因可能是因为不同的问题,请仔细阅读)

首先,请尝试使用其中一个,而不是Content(其大写C)。

解决了上述问题后,代码中会出现另一个错误。

loginid = driver.find_elements_by_id('user_id') 
loginid.send_keys("***") 

driver.find_elements_by_id找到所有匹配的元素,它是一个列表。所以你不能使用send_keys。请使用driver.find_element_by_id('user_id')

这是我测试的代码工作。

from selenium import webdriver 

driver = webdriver.Firefox() 

driver.get("https://my.oregonstate.edu/webapps/login/") 
driver.switch_to.frame('content') # all lower case to match your actual frame name 

loginid = driver.find_element_by_id('user_id') 
loginid.send_keys("***") 
passwd = driver.find_element_by_id('password') 
passwd.send_keys("***") 

关于问题在您的评论如下

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("https://my.oregonstate.edu/webapps/login/?action=relogin") 

loginid = driver.find_element_by_id('user_id') 
loginid.send_keys("***") 
passwd = driver.find_element_by_id('password') 
passwd.send_keys("***") 

driver.find_element_by_css_selector('.submit.button-1').click() 
+0

你是对上发现的元素。然而,我的问题仍然存在于iframe中。无论我使用什么,无论是id还是name,它仍然无法连接。我注意到有另一个导航栏的iframe。但我不应该连接到第一个权利?它们在html中是分开的。你有什么建议吗? – KJS 2014-09-02 18:14:58

+0

@KJS:我已经测试了上面的代码。你在使用什么环境?我有Python 2.7.5,Selenium 2.42.1,Firefox 24.6.0 ESR。请尝试与Chrome,如果它的工作,那么它应该是一个Firefox问题,而不是代码。 – 2014-09-02 20:53:25

+0

嗯,我得到它使用不同的URL来连接。我不认为这是代码,但奇怪的是,也许是网站。我目前正在使用网站: https://my.oregonstate.edu/webapps/login/?action=relogin 它允许我输入字段但不选择提交按钮。我正在使用find_element_by_class_name('submit button-1'),但我得到错误'给定的选择器提交按钮1无效或不会导致webelement。有什么想法吗? – KJS 2014-09-03 02:31:41