这是我的代码:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://mail.yahoo.com')
emailElem = browser.find_element_by_id('login-username')
emailElem.send_keys('myemail@sbcglobal.net')
emailElem.submit()
passwordElem = browser.find_element_by_id('login-passwd')
passwordElem.send_keys('password')
signInLink = browser.find_element_by_id('login-signin')
signInLink.click()
当我在外壳程序中分别键入每一行时,它可以正常工作,并且可以登录我的电子邮件,但是,当我从文件运行脚本时,它在第8行崩溃。错误消息是“无法找到元素[id =“ login-passwd”]。虽然不知道为什么它可以在外壳中工作。但是在那儿,它确实确实找到了该字段。请参见下面的屏幕截图,以便您可以看到它在外壳上的工作方式(左),但是在崩溃时会崩溃从文件运行(右)。哦,如果您能告诉我为什么使用emailElem.submit()可以工作,但不能使用passwordElem.submit()可以,请给我加分,我必须找到按钮并单击该链接。将passwordElem.submit()重置页面,密码字段变为空白。不知道为什么
答案 0 :(得分:3)
该脚本的运行速度比在外壳中粘贴每一行要快-由于该元素是在页面中动态创建的,因此在粘贴每一行时,您有足够的时间让浏览器运行javascript代码并生成该元素。
运行脚本时,在创建元素之前已到达搜索元素的行,因此会出现错误。
有许多可能的解决方案,通常涉及使用selenium wait method或time.sleep
或它们的组合。