首页 > 解决方案 > Selenium:打开新链接并切换选项卡以获取内容

问题描述

我尝试获取某些链接的内容。所以我打开了一些链接,然后单击所需的链接,它在新选项卡中打开,然后尝试获取它的内容。

但我无法切换到打开的点击链接

我试试

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])

但它也会返回我第一次打开的内容链接。

我该如何解决?如何切换到打开链接的选项卡,我尝试点击?然后关闭该选项卡并切换回来?

标签: pythonselenium

解决方案


您必须使用窗口句柄切换到新选项卡。从此页面阅读更多内容https://selenium-python.readthedocs.io/navigating.html#moving-between-windows-and-frames

driver.window_handles将给出可用窗口句柄的列表。

driver.current_window_handle将打印当前窗口句柄。

用于driver.switch_to.window切换到窗口句柄。

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)

输出

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

输出是来自新选项卡的文本。如果需要,您可以打印整个页面源。


推荐阅读