强制页面在新 window selenium-web-driver python 中打开

Force page to open in new window selenium-web-driver python

如何在 selenium-web-driver python 中强制 link 在新的 window 中打开并切换到它提取数据并关闭它 目前我正在使用以下代码

for tag in self.driver.find_elements_by_xpath('//body//a[@href]'):
            href = str(tag.get_attribute('href'))
            print href
            if not href:
                continue
            window_before = self.driver.window_handles[0]
            print window_before
            ActionChains(self.driver) \
                .key_down(Keys.CONTROL ) \
                .click(tag) \
                .key_up(Keys.CONTROL) \
                .perform()
            time.sleep(10)
            window_after = self.driver.window_handles[-1]
            self.driver.switch_to_window(window_after)
            print window_after
            time.sleep(10)
            func_url=self.driver.current_url
            self.driver.close()
            self.driver.switch_to_window(window_before)

问题

  1. 如果上面的代码用

    命中 link 则不会强制执行

    <a href="" target="_blank">something</a>

  2. 经过大约两个 links 后,它会停止打印

    StaleElementReferenceException: Message: The element reference is stale. Either the element is no longer attached to the DOM or the page has been refreshed.

您可以尝试以下方法在新 window 中打开 link:

current_window = self.driver.current_window_handle
link = self.driver.find_element_by_tag_name('a')
href = link.get_attribute('href')
if href:
    self.driver.execute_script('window.open(arguments[0]);', href)
else:
    link.click()
new_window = [window for window in self.driver.window_handles if window != current_window][0]
self.driver.switch_to.window(new_window)
# Execute required operations
self.driver.close()
self.driver.switch_to.window(current_window)

这应该允许您获取 link URL 并在新的 window 中用 JavaScriptExecutor 打开它,如果它不是空字符串,只需单击 link 除此以外。由于有问题的 link 具有属性 target="_blank" 它将在新的 window

中打开