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)
输出
ОПИСАНИЕ ИЗОБРЕТЕНИЯ К ПАТЕНТУ
输出是来自新选项卡的文本。如果需要,您可以打印整个页面源。
推荐阅读
- javascript - 按字母顺序对api的json响应进行排序
- python-3.x - 带有用于定义变量的输入的函数不会执行
- python - 就地矩阵乘法 __imatmul__ 返回修改后的对象
- javascript - 是否有一个 JS 函数可以按函数值对列表进行排序
- laravel - AWS ElasticBeanstalk 上的 Laravel 应用程序未连接到 RDS 数据库
- javascript - 尝试在 D3.js (v3) 中沿圆弧路径为圆设置动画
- docker - 从现有的 docker 镜像创建 docker 镜像并运行新的 docker 镜像
- go - time.Duration * time.Duration 应用了两次
- python - 使用正则表达式后 Pandas .loc 不起作用?
- javascript - 如何修复在数据上添加前导零的逻辑?