如何在selenium(Python)中按TAB键获取元素?

如何在selenium(Python)中按TAB键获取元素?,python,selenium,Python,Selenium,我想在网站上填写一些个人资料。第一个输入元素可以通过find_element_by_id访问,但是每次我访问网站时,下一个文本字段的id都有不同的id。在浏览器中,我只需按TAB键两次即可进入所需的文本输入字段。有没有一种方法可以实现与硒类似的行为 我尝试了以下方法: input1 = browser.find_element_by_id('id_email') input1.send_keys("email@something.com") input2 = browser

我想在网站上填写一些个人资料。第一个输入元素可以通过find_element_by_id访问,但是每次我访问网站时,下一个文本字段的id都有不同的id。在浏览器中,我只需按TAB键两次即可进入所需的文本输入字段。有没有一种方法可以实现与硒类似的行为

我尝试了以下方法:

input1 = browser.find_element_by_id('id_email')
input1.send_keys("email@something.com")

input2 = browser.send_keys(Keys.TAB).send_keys(Keys.TAB)
input2.send_keys("Something else")
但第3行告诉我:

AttributeError: 'WebDriver' object has no attribute 'send_keys'
欢迎光临


我只能猜测,因为我无法测试代码。但是,似乎您没有使用这两个选项卡获得正确的元素,因为它从html页面的开头开始,而不是从input1字段开始。您最好通过其id或父id获取密码,而不是使用Key.TAB。

您不能针对浏览器对象发送密钥。 这一行:

input2 = browser.send_keys(Keys.TAB).send_keys(Keys.TAB)
无效。它甚至会这样告诉您:
“WebDriver”对象没有属性“send\u keys”

也就是说,您的webdriver对象(您称之为“浏览器”)没有名为Send_Keys的属性(方法/函数)

避免此类问题的首要技巧是使用具有intellisense的良好IDE。这将告诉您可以使用的方法

在vscode中,您可以看到:

当您输入时,它会告诉您有效的命令-您可以看到驱动程序没有发送键

您需要做的是对web元素使用
.sendKeys(..)

在您的代码中已经有
input1
——这是一个web元素。你可以派钥匙来对付它

大概是这样的:

input1 = browser.find_element_by_id('id_email')
input1.send_keys("email@something.com")
input1.send_keys(Keys.Tab)
如果要对同一对象执行多个选项卡,只需添加多个选项卡即可。这将是3次

.send_keys(Keys.TAB + Keys.TAB + Keys.TAB)
当我在google.com上运行示例脚本时, 我点击谷歌搜索按钮三次。(第一个选项卡是清除,第二个选项卡是麦克风,第三个选项卡指向按钮):

最后,使用标签导航是最后的选择。它们可能是不稳定的。您确实应该为您的对象获取一个标识符。
如果您可以共享您的URL或页面DOM,那么我将帮助您识别一个工作标识符。我知道你说没有ID,但是有很多方法可以访问对象。

你能分享你的url吗?您可以标识ID不止一个的对象,并且可以查找彼此相关的对象。如果我们向您展示如何(因此我们需要url或dom)将有助于您的学习。。。。或者,您可以针对input1对象(而不是浏览器)快速尝试使用tab键发送键。可能不起作用,但这是您手动执行的操作,当您按tab键时,您首先进入字段。