我正在尝试连接到学校网址,并使用硒自动执行该过程。最初,我尝试使用碎片,但遇到了类似的问题。我似乎无法与用户名和密码字段进行交互。我意识到一些方式,因为它是我需要与之交互的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:
iframe:
形式:
用户名:
密码:
硒似乎可以找到刚刚找到的元素,但是我无法在这些字段中输入任何信息,出现错误“列表对象没有属性”。当我意识到这是iframe时,我尝试进入其中,但显示“无法找到框架:内容”。我还缺少另一个iframe吗?还是明显的东西?这是我第一次来这里,如果对代码链接有任何误解,对不起。
谢谢您的帮助。
解决方案
driver.switch_to.frame()取框架的idorname,其中您的框架具有id =contentFrame和name =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()