首页 > 解决方案 > 我使用selenium(python)从WOS顶级论文中检索一些数据,但是当我使用click()打开子链接时,我只能打开第一个url

问题描述

我的任务是从以下网站打开每个 url 并检索每篇文章的一些评估数据。我已成功定位元素,这意味着我得到了 10 个元素。但是,当 selenium 开始模仿人类点击 url 时,它只能打开十个链接中的第一个链接。https://esi.clarivate.com/DocumentsAction.action 在此处输入图像描述

HTML:在此处输入图像描述

在此处输入图像描述

代码如下。

import time
from selenium import webdriver


driver=webdriver.Chrome('/usr/local/bin/chromedriver')
driver.get('https://esi.clarivate.com/IndicatorsAction.action?Init=Yes&SrcApp=IC2LS&SID=H3-M1jrs4mSS2O3WTFbtdrUJugtDvogGRIM-18x2dx2B1ubex2Bo9Y5F6ZPQtUZbfUAx3Dx3Dp1StTsneXx2B7vu85UqXoaoQx3Dx3D-03Ff2gF3hTJGBPDScD1wSwx3Dx3D-cLUx2FoETAVeN3rTSMreq46gx3Dx3D')

#add filter-> research fields-> "clinical medicine"
target = driver.find_element_by_id("ext-gen1065")
time.sleep(1)
target.click()
time.sleep(1)

n = driver.window_handles
driver.switch_to.window(n[-1])

links=driver.find_elements_by_class_name("docTitle")
length=len(links)
for i in range(0,length):
    item=links[i]
    item.click()
    time.sleep(1)


    handles=driver.window_handles  
    index_handle=driver.current_window_handle  
    for handle in handles: 
        if handle != index_handle:  
            driver.switch_to.window(handle)  
        else:
            continue            
    time.sleep(1)
    u1=driver.find_elements_by_class_name("large-number")[2].text
    u2=driver.find_elements_by_class_name("large-number")[3].text
    print(u1,u2)
    print("\n")
    driver.close()
    time.sleep(1)

    driver.switch_to_window(index_handle)
driver.quit()
print("————finished————")

错误页面: 在此处输入图像描述

我尝试通过测试这些代码来找出问题所在:

links=driver.find_elements_by_class_name("docTitle")
length=len(links)
print(length)
print(links[1].text)
#links[0].click()
links[1].click()

结果是: 在此处输入图像描述 这意味着它已经找到了元素,但无法打开它。(使用 links[0].text 时,它工作正常。)对此有什么想法吗?

标签: pythonseleniumweb-crawlerspyder

解决方案


推荐阅读