如何在当前的Web浏览器中发送快捷键?

时间:2015-09-03 04:53:06

标签: python selenium

我正在尝试使用python中的selenium发送一些快捷键来打开chrome中的新选项卡。我打开Facebook,然后我登录,然后我想打开一个新的标签,我可以通过我的朋友的网址,以便我可以查看他的个人资料。我写了以下代码:

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

driver = webdriver.Chrome()

#opening browser and loging into the account
def login():
    driver.get("http://www.facebook.com")
    elem = driver.find_element_by_xpath("//*[@id=\"email\"]")
    elem.send_keys("myUsername")
    password = driver.find_element_by_name("pass")
    password.send_keys("myPassword")
    elem.send_keys(Keys.RETURN)
    driver.implicitly_wait(5)

def scout():
    scroll =     driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
    driver.get("http://www.facebook.com/some.friend")
    driver.implicitly_wait(8)

login()
scout()

但它给了我错误:

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

我让浏览器隐式等待,但仍然无法找到标签。请帮忙。

1 个答案:

答案 0 :(得分:0)

首先,尝试调用WebDriverWait而不是find_element_by_css_selector来查找元素。它每半秒调用一次find_element_by_<method>,直到超时。这样您就不必使用implicitly_waittime.sleep()进行赌博。 关于你打开新的选项卡问题 - 你不能发送ctrl + t到chromedriver,它根本不会做任何事情(它可以在Firefox上工作)。我之前遇到过这个问题,我找到的最佳解决方案是在网站上搜索一个链接,所以如果你在Facebook上,你可以使用左上角的F图标。然后你可以发送ctrl + shift +点击在新标签页中打开它。

        from selenium.webdriver import ActionChains
        actions = ActionChains(driver);
        actions.move_to_element(link)
        actions.send_keys(Keys.CONTROL+ Keys.SHIFT)
        actions.click(link)
        actions.perform()

从那里你应该只使用

切换标签
        tabs = driver.window_handles
        driver.switch_to.window(tabs[<index>])