Petr Petrov
Petr Petrov

Reputation: 4442

Selenium: open new link and switch tab to get content

I try to get content of some link. So I open some link and next click on desirable link, it opens in new tab and next try to get content of it.

But I can't switch to opened clicked link

I try

link = driver.find_element_by_link_text(file)
driver.execute_script('arguments[0].scrollIntoView();', link)
link.click()
driver.switch_to_window(driver.window_handles[1])

But it also returns me content first opened link.

How can I fix that? How to switch to tab with opened link, that I try to click? And next close that tab and switch back?

Upvotes: 1

Views: 1113

Answers (1)

Bitto
Bitto

Reputation: 8215

You have to switch to the new tab using window handles. Read more from this page https://selenium-python.readthedocs.io/navigating.html#moving-between-windows-and-frames

driver.window_handles will give a list of window handles available.

driver.current_window_handle will print the current window handle.

Use driver.switch_to.window to switch to a window handle.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('/path/to/chromedriver')
url="http://www1.fips.ru/wps/portal/!ut/p/c5/jY5bDkNAGIXX0hXMjyleh6QzlKnbKF5E0kZIXRJCa_VlAbTnPJ58Jx_K0Nq2mKqyGKuuLV4oQZmaWxbx2JVKcJNdAKJzQS62KgNV1j1Vc5MShjUHgPLABAsbWGbUkMFS_qFhJwR-0HeUAM7DWu_dz5g4izlF9eK_B8efh4VIPBLgcsd7xIEwiNFgO4hXJttej4y3_cCJs655ohRl2p4bDc-ob4SYejaX5HT6Ahe0tjA!/dl3/d3/L0lDU0lKSmdwcGlRb0tVUW9LVVFvS1VRIS9ZQVVJQUFJSUlJTU1JQ0tDRUFBRUFDR0lLQUdJT0JKQkpPQkZORk5PRkRMRExPREEvNEMxYjlXX05yMGdDVWd4RW1SQ1V3cE1oRXBSU1pHSlRpQSEhLzdfSUlBUEhLRzEwTzJNMDBBOE5VQUZKNjJHUzUvd2x5Snc5OTUzMDEwNi80MDk4Njg1NTc1NjcvbWF4TGV2ZWwvMS9ub2RlSWQvNTgvYWNOYW1lL2NsaWNrVHJlZQ!!/"
driver.get(url)
element=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,'//*[@id="mainContent"]/table/tbody/tr[1]/td/div[2]/table/tbody/tr[1]/td[2]/div[2]/div/table/tbody/tr/td/table/tbody/tr/td[1]/table/tbody/tr/td/div/table/tbody/tr/td/div[1]/table/tbody/tr[2]/td[2]/a')))
element.click()
element=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,'//*[@id="mainContent"]/table/tbody/tr[1]/td/div[2]/table/tbody/tr[1]/td[2]/div[2]/div/table/tbody/tr/td/table/tbody/tr/td[1]/table/tbody/tr/td/div/table/tbody/tr/td/div/ul/ul/ul/ul/ul/li[1]/a[2]')))
element.click()
#below opens in a new tab
element=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,'//*[@id="mainContent"]/table/tbody/tr[1]/td/div[2]/table/tbody/tr[1]/td[2]/div[2]/div/table/tbody/tr/td/table/tbody/tr/td[1]/table/tbody/tr/td/div/table/tbody/tr/td/table[2]/tbody/tr[1]/td[3]/a')))
element.click()
driver.switch_to.window(driver.window_handles[1])
element=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,'//*[@id="NameDoc"]/b')))
print(element.text)

Output

ОПИСАНИЕ ИЗОБРЕТЕНИЯ К ПАТЕНТУ

The output is a text from the new tab. You can print the entire page source if you want.

Upvotes: 2

Related Questions