Selenium无法打开新窗口/标签

时间:2018-05-21 16:02:50

标签: python selenium web-crawler

我目前正在尝试使用selenium抓取网站。 我有一个包含元素的表,我想点击每个元素,在新窗口/选项卡中打开链接,处理此窗口/选项卡,关闭它并单击下一个元素等。到目前为止,我可以单击元素表,打开链接并处理页面。 不幸的是,我无法在新窗口或标签中打开链接。

我无法向元素发送键盘命令。 我也试过

action = ActionChains(self.driver)
    action.move_to_element(ele)\
    .key_down(Keys.SHIFT)\
    .click(ele)\
    .key_up(Keys.SHIFT)\
    .perform()

这在某种程度上只打开当前窗口中的链接(我没有得到一个新的窗口句柄,仍然只有一个)。 我会非常感谢任何帮助。

编辑:此外,我无法使用浏览器手动在新窗口/标签中打开链接。

2 个答案:

答案 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() 
    
  • 浏览器快照:

Google_Gmail

答案 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。它对我有用。