我只希望relevent <td>
类单击标签,并且必须通过在新选项卡上将其打开来实现。这是我的代码:
x1=driver.find_element_by_class_name('no').send_keys(Keys.COMMAND + 't')
答案 0 :(得分:1)
请尝试以下操作:
x1=driver.find_element_by_class_name('no')
ActionChains(driver).key_down(Keys.COMMAND).click(x1).key_up(Keys.COMMAND).perform()
browser.switch_to.window(browser.window_handles[1])
答案 1 :(得分:1)
这里的一个问题是td
中有多个class='no'
元素,因此很难确定您需要单击哪个元素。由于列表中的第二个元素已突出显示,因此我们可以假设您尝试单击第二个a
链接。
听起来您正在尝试获取a
元素,以便您可以单击链接,然后单击该链接将打开一个新标签。您首先需要找到a
才能单击,然后将焦点切换到新打开的标签页:
from selenium.webdriver.support.ui import WebDriverWait
# get number of currently open windows
windows_before = len(driver.window_handles)
# click link -- [2] specifies which one to click, change this to click different one
driver.find_element_by_xpath("//td[@class='no'][2]/a").click()
# wait up to 10s for new tab to open, then switch focus to new tab
WebDriverWait(driver, 10).until(lambda driver: len(windows_before) != len(driver.window_handles))
# switch to new window
driver.switch_to_window(len(driver.window_handles)-1)
上面的代码首先使用driver.window_handles
存储当前打开的选项卡的数量。然后,一旦单击第二个 a
元素以打开event328706602.html
链接,就会在打开的窗口数上调用WebDriverWait
。请注意,您需要根据需要单击哪个[2]
元素来更新XPath中的a
。
在WebDriverWait
中,我们等待窗口的数量比以前存储的值大 ,因此我们知道新窗口已经打开。然后,通过检查len(driver.window_handles)
切换到新窗口句柄,并切换到列表的最后window_handle
索引。