一尘不染

在选项卡之间切换并使用Selenium对单个对象执行操作

selenium

我正在尝试提取URL,将其打开到新选项卡中,然后执行一些操作。我的代码是-

urls = self.driver.find_elements_by_xpath('//div[@id="maincontent"]/table/tbody/tr/td//a[@href]')
        for url in urls:

            try:
                href = url.get_attribute("href")[28:]
                print href
                actions = ActionChains(self.driver)
                url_1 = self.driver.find_element_by_xpath('//*[@href="'+href+'"]')
                actions.key_down(Keys.CONTROL).click(url_1).key_up(Keys.CONTROL).perform()
            except Exception, e:
                print e

        actions1 = ActionChains(self.driver)      
        actions1.key_down(Keys.CONTROL).key_down(Keys.TAB).key_up(Keys.TAB).key_up(Keys.CONTROL).perform()
        print "hi"
        show_report = self.driver.find_element_by_xpath('//*[@value="Show Report(s)"]')
        show_report.click()

它会在新选项卡中打开URL,但不会对其执行任何操作。我该怎么办??


阅读 228

收藏
2020-06-26

共1个答案

一尘不染

您需要将焦点更改为新标签,因为它们通常会在后台打开。然后,您需要抓住当前当前选项卡的句柄。

在这里描述:

>     import selenium.webdriver as webdriver
>     import selenium.webdriver.support.ui as ui
>     from selenium.webdriver.common.keys import Keys
>     from time import sleep  
>  
>     browser = webdriver.Firefox()
>     browser.get('https://www.google.com?q=python#q=python')
>     first_result = ui.WebDriverWait(browser, 15).until(lambda browser:
> browser.find_element_by_class_name('rc'))
>     first_link = first_result.find_element_by_tag_name('a')
>  
>     # Save the window opener (current window, do not mistaken with tab...
> not the same)
>     main_window = browser.current_window_handle
>  
>     # Open the link in a new tab by sending key strokes on the element
>     # Use: Keys.CONTROL + Keys.SHIFT + Keys.RETURN to open tab on top of the
> stack
>     first_link.send_keys(Keys.CONTROL + Keys.RETURN)
>  
>     # Switch tab to the new tab, which we will assume is the next one on the
> right
>     browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL +
> Keys.TAB)
>  
>     # Put focus on current window which will, in fact, put focus on the
> current visible tab
>     browser.switch_to_window(main_window)
>  
>     # do whatever you have to do on this page, we will just got to sleep for
> now
>     sleep(2)
>  
>     # Close current tab
>     browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 'w')
>  
>     # Put focus on current window which will be the window opener
>     browser.switch_to_window(main_window)
2020-06-26