使用 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。
有问题请追问
使用 ActionChain
和 key_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()
我需要使用 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。
有问题请追问
使用 ActionChain
和 key_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()