python - Selenium:打开新链接并切换选项卡以获取内容

标签 python 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])

但它也会返回我首先打开的链接的内容。

我该如何解决这个问题?如何切换到我尝试单击的打开链接的选项卡?接下来关闭该选项卡并切换回来?

最佳答案

您必须使用窗口句柄切换到新选项卡。从本页阅读更多内容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)

输出

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

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

关于python - Selenium:打开新链接并切换选项卡以获取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54390766/

相关文章:

python - 如何使用 BeautifulSoup 等待一秒钟保存汤元素以让元素在页面中加载完成

java - Selenium Java - 如何从不同的类调用一个类

javascript - Protractor ElementFinder/ElementArrayFinder 理解

python - 使用 Bamboo 时重新标记后,Git 标签链接到旧提交

Python 数据结构开销/性能

python - 赋值运算符的 LHS 上使用了关键字 'str'

python - Python scrapy项目中传递全局变量的问题

python - 如何从索引开始查找第一次出现的 bool 值

java - 让驱动程序等待条件为真并在条件为假时继续的最佳方法是什么?

java - 如果我不使用selenium服务器独立文件,是否需要selenium服务器使用selenium客户端创建selenium自动化?