使用 Python 绑定在 Selenium 中发送键控制 + 单击

Send keys control + click in Selenium with Python bindings

我需要使用 Selenium 在新选项卡中打开 link。

那么是否可以在 Selenium 中的元素上执行 ctrl+click 以在新选项卡中打开它?

以下是我尝试使用 Java 绑定的 Selenium WebDriver 及其对我的工作。 如果您想在新选项卡中手动打开 Link,您可以通过在 Link 上执行上下文单击并选择 'Open in new Tab' 选项来实现。下面是带有 Java 绑定的 Selenium 网络驱动程序中的实现。

Actions newTab= new Actions(driver);
WebElement link = driver.findElement(By.xpath("//xpath of the element"));

//Open the link in new window
newTab.contextClick(link).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();

Web 驱动程序处理新选项卡的方式与处理新选项卡的方式相同 window。您将必须通过 window 名称切换到新打开的标签页。

driver.switchTo().window(windowName);

您可以跟踪 window-名称,这将帮助您轻松地在选项卡之间导航。

两种可能的解决方案:

打开新标签页

self.driver = webdriver.Firefox()
self.driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't') 

这是 MAC OSX 的解决方案。在其他情况下,您可以使用标准 Keys.CONTROL + 't'

正在打开一个新的网络驱动程序

driver = webdriver.Firefox() #1st window
second_driver = webdriver.Firefox() #2nd windows 

以下正在帮助我在新标签页中打开 link:

   String link = Keys.chord(Keys.CONTROL,Keys.ENTER); 
   driver.findElement(By.linkText("yourlinktext")).sendKeys(link);

以上代码在java中。我想你可以很容易地转换成 python。

有问题请追问

使用 ActionChainkey_down 按下控制键,然后 key_up 释放它:

import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

driver.get('http://google.com')
element = driver.find_element_by_link_text('About')

ActionChains(driver) \
    .key_down(Keys.CONTROL) \
    .click(element) \
    .key_up(Keys.CONTROL) \
    .perform()

time.sleep(10) # Pause to allow you to inspect the browser.

driver.quit()

通过导入键 Class,我们可以在新选项卡或新 window 中打开页面,使用 CONTROL 或 SHIFT 并输入这些键: driver.find_element_by_xpath('//input[@name="login"]').send_keys(Keys.CONTROL,Keys.ENTER)

driver.find_element_by_xpath('//input[@name="login"]').send_keys(Keys.SHIFT,Keys.ENTER)

对于 python,一个好的解决方案是 driver.find_element_by_css_selector('<enter css selector here>').send_keys(Keys.CONTROL, Keys.RETURN)

之后,您应该更改 windows 以便 selenium 可以在新的 window

中运行
window_before = driver.window_handles[0]    
window_after = driver.window_handles[1]
driver.switch_to_window(window_after)

使用后window有用关闭它或返回原来的:

关闭选项卡:driver.close()

回到原文:driver.switch_to_window(window_before)

如果您的 Selenium 版本不支持其他版本,请尝试 driver.switch_to.window()