为什么我的Selenium代码在Python Shell中可以工作,但不能在文件中工作?

时间:2018-08-14 18:25:48

标签: python selenium

这是我的代码:

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()重置页面,密码字段变为空白。不知道为什么

enter image description here

1 个答案:

答案 0 :(得分:3)

该脚本的运行速度比在外壳中粘贴每一行要快-由于该元素是在页面中动态创建的,因此在粘贴每一行时,您有足够的时间让浏览器运行javascript代码并生成该元素。

运行脚本时,在创建元素之前已到达搜索元素的行,因此会出现错误。

有许多可能的解决方案,通常涉及使用selenium wait methodtime.sleep或它们的组合。