如何使用Selenium发送多个标签?
当我跑步时:
uname = browser.find_element_by_name("text")
uname.send_keys(Keys.TAB)
选择下一个元素。当再次执行uname.send_keys(Keys.TAB)
时,没有任何事情发生 - 实际上选择了来自uname
的下一个元素 - >所以它与运行一次时相同。
我怎样才能多次前进 - 基本上我会多次手动按TAB?
答案 0 :(得分:14)
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
N = 5 # number of times you want to press TAB
actions = ActionChains(browser)
for _ in range(N):
actions = actions.send_keys(Keys.TAB)
actions.perform()
或者,因为这是Python,你甚至可以这样做:
actions = ActionChains(browser)
actions.send_keys(Keys.TAB * N)
actions.perform()
答案 1 :(得分:2)
我想你也可以写
uname.send_keys(Keys.TAB + Keys.TAB + Keys.TAB + ... )
如果您只有2或3个命令要发送,这可能很有用。
答案 2 :(得分:0)
OP指出:“实际上选择了uname
中的下一个元素”。
在第一个<TAB>
键之后,您移出了元素,因此该元素将不再识别另外的<TAB>
。您需要找到 parent 元素并将密钥发送到 it 。
答案 3 :(得分:0)
sendkeys(Keys.Tab, Keys.Tab, Keys.Tab)
工作正常。
答案 4 :(得分:0)
这种语法救了我:
ActionChains(driver).send_keys(Keys.TAB * 2).perform()
我尝试从the accepted answer使用它:
actions = ActionChains(browser)
actions.send_keys(Keys.TAB * 2)
actions.perform()
但是由于以后我想在同一脚本中使用三个TAB,所以遇到了问题。问题是,actions.send_keys(Keys.TAB * 3)
只是在同一脚本中将添加到actions
中的前几行。因此,第二次使用此行之后,我没有按下三个TAB键,而是五个(即2 + 3)。此外,ActionChains.reset_actions()
does not seem to work。
答案 5 :(得分:-1)
uname.send_keys(Keys.TAB,Keys.TAB,Keys.TAB..)
为我工作