我目前正在尝试使用selenium抓取网站。 我有一个包含元素的表,我想点击每个元素,在新窗口/选项卡中打开链接,处理此窗口/选项卡,关闭它并单击下一个元素等。到目前为止,我可以单击元素表,打开链接并处理页面。 不幸的是,我无法在新窗口或标签中打开链接。
我无法向元素发送键盘命令。 我也试过
action = ActionChains(self.driver)
action.move_to_element(ele)\
.key_down(Keys.SHIFT)\
.click(ele)\
.key_up(Keys.SHIFT)\
.perform()
这在某种程度上只打开当前窗口中的链接(我没有得到一个新的窗口句柄,仍然只有一个)。 我会非常感谢任何帮助。
编辑:此外,我无法使用浏览器手动在新窗口/标签中打开链接。
答案 0 :(得分:0)
访问网址,例如https://www.google.co.in
然后点击一个元素,例如以 Gmail 链接文字以在新窗口/标签中打开链接,您可以按照以下解决方案使用action_chains
课程:
代码块:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument('disable-infobars')
driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get('https://www.google.co.in')
print("Page Title is : %s" %driver.title)
mail_link = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Gmail")))
ActionChains(driver).key_down(Keys.CONTROL).click(mail_link).key_up(Keys.CONTROL).perform()
浏览器快照:
答案 1 :(得分:0)
由于Gmail是'a'标签,因此请首先获得如下所示的标签并执行操作链
from selenium.webdriver.common.action_chains import ActionChains
gmailtag = webdriver.find_element_by_xpath('path to gmail') # you can use any other methods to get it.
#Now you can run this to open the gmailtag in a new tab
ActionChains(webdriver).key_down(Keys.CONTROL).click(gmailtag).perform()
# this also worked for me
gmailtag.send_keys(Keys.CONTROL+Keys.ENTER)
它将在新标签页中打开Gmail。它对我有用。