如何使用硒从网站上获取具有复合类的元素(使用CSS选择器)

时间:2019-01-14 16:30:27

标签: python macos selenium selenium-webdriver

我试图使用硒登录Gmail。 我得到了ID元素,下一按钮元素,但是我无法获得密码元素。

这是代码段。

browser = webdriver.Firefox(executable_path = '/Users/ritikjangir/Downloads/geckodriver')
browser.get('http://gmail.com')

emailE = browser.find_element_by_id('identifierId')
emailE.send_keys(email)

nextE = browser.find_element_by_class_name('CwaK9')
nextE.click()

passE = browser.find_element_by_name('password')
passE.send_keys(password)

电子邮件和密码是将我的ID和密码存储为字符串的变量。

这会出现以下错误:

  

============重新启动:/Users/ritikjangir/Documents/LineEmailer.py =========== Traceback(大多数   最近通话结束):文件   “ /Users/ritikjangir/Documents/LineEmailer.py”,第26行,在       passE.send_keys(password)文件“ /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py”,   第479行,位于send_keys中       “值”:keys_to_typing(value)})文件“ /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py”,   _execute中的第633行       返回self._parent.execute(命令,参数)文件“ /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py”,   第321行,在执行中       self.error_handler.check_response(响应)文件“ /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py”,   第242行,在check_response中       引发exception_class(消息,屏幕,堆栈跟踪)selenium.common.exceptions.ElementNotInteractableException:消息:   元件   键盘无法访问

最糟糕的是,它只运行了一次。

输入密码元素的属性。是:

input type =“ password” class =“ whsOnd zHQkBf” jsname =“ YPqjbf” autocomplete =“ current-password” spellcheck =“ false” tabindex =“ 0” aria-label =“输入密码” name =“密码“ autocapitalize =” off“ autocorrect =” off“ dir =” ltr“ data-initial-dir =” ltr“ data-initial-value =”“>

2 个答案:

答案 0 :(得分:0)

您尝试过:

nextE = browser.find_element_by_class_name('CwaK9') nextE.click()
time.sleep(2)
passE = browser.find_element_by_name('password') passE.send_keys(password)

自从运行一次以来,似乎在单击和填充数据之间,我们需要一些时间来激活代码段。

答案 1 :(得分:0)

尝试使用css选择器作为密码元素

passE = browser.find_element_by_css_selector('input[type=password]')
passE.send_keys(password)