我正在尝试使用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
我让浏览器隐式等待,但仍然无法找到标签。请帮忙。
答案 0 :(得分:0)
首先,尝试调用WebDriverWait
而不是find_element_by_css_selector
来查找元素。它每半秒调用一次find_element_by_<method>
,直到超时。这样您就不必使用implicitly_wait
或time.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>])