键盘无法访问硒元素

时间:2019-07-18 23:42:48

标签: python selenium selenium-webdriver selenium-firefoxdriver

我正在尝试使用python中的硒登录我的Google帐户。我不断遇到以下错误:

selenium.common.exceptions.ElementNotInteractableException: Message: Element <input class="whsOnd zHQkBf" name="password" type="password"> is not reachable by keyboard

我看过其他一些类似的问题,但是大多数问题都是关于身份验证失败的。另一个post建议寻找可以覆盖它的东西,但我什么也没看到。另外,输入框不会按照其html隐藏:

<input type="password" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="current-password" spellcheck="false" tabindex="0" aria-label="Enter your password" name="password" autocapitalize="off" dir="ltr" data-initial-dir="ltr" data-initial-value="" badinput="false">

我也尝试过在没有密码的情况下访问密码输入框之前放入一些等待语句。 我还检查以确保find_elemnt_by函数仅返回1个元素。

为确保我做得正确,我在亚马逊上对其进行了测试,并且效果很好,所以不确定为什么Google很难做到。

这是我的代码:

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

# create a new Firefox session
driver = webdriver.Firefox(executable_path="D:\Selenium\geckodriver.exe")
driver.implicitly_wait(5)

# Navigate to youtube
driver.get("https://www.youtube.com/")

sign_in_button = driver.find_element_by_css_selector('ytd-button-renderer.style-scope:nth-child(5)')
sign_in_button.click()

username = driver.find_element_by_css_selector('#identifierId')
username.send_keys('johndoe@gmail.com')

next_button = driver.find_element_by_css_selector('#identifierNext')
next_button.click()

password_text_box = driver.find_element_by_css_selector('.I0VJ4d > div:nth-child(1) > input:nth-child(1)')
# FAILS HERE
password_text_box.send_keys('fakepassword')

next_password_button = driver.find_element_by_css_selector('#passwordNext')
next_password_button.click()

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我将其放在此处,以防有人亲自遇到此问题。

我无法直接解决登录问题,但是找到了解决方法。

我之前曾尝试使用Cookie,但是做错了事,所以,我只是复制了Firefox个人资料(已保存了google的auth cookie)并将其附加到了网络驱动程序上。

ffp = FirefoxProfile(r"C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\sel_test")
driver = webdriver.Firefox(executable_path="D:\Selenium\geckodriver.exe", firefox_profile=ffp)

答案 1 :(得分:0)

我遇到了类似的问题,并且执行了以下操作:

1)我首先使用“ find_element_by_css_selector”函数,该函数选择具有给定属性的元素的首次出现。这没用。

2)然后,我使用了“ find_elements_by_css_selector”(注意s),它返回具有给定属性的元素的列表。该列表中有2个元素。当然,第一个键(索引为[0])无法通过键盘访问:这等效于上面的(1)。但是第二个元素(索引为[1])可以通过键盘访问。 问题解决了。