关于Python Selenium自动化导出新版WOS(web of science)检索结果的问题

selenium 介绍

selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选 selenium ,因为它相比 QTP 有诸多有点:

  • 免费,也不用再为破解 QTP 而大伤脑筋
  • 小巧,对于不同的语言它只是一个包而已,而 QTP 需要下载安装1个多 G 的程序。
  • 这也是最重要的一点,不管你以前更熟悉 C、 java、ruby、python、或都是 C# ,你都可以通过 selenium 完成自动化测试,而 QTP 只支持 VBS
  • 支持多平台:windows、linux、MAC ,支持多浏览器:ie、ff、safari、opera、chrome
  • 支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器的执行,相当于分发机的功能。

官方文档:

https://selenium-python.readthedocs.io/index.html
https://seleniumhq.github.io/selenium/docs/api/py/api.html

写在前面

有的时候需要某个领域的所有论文数据,此时web of science数据库检索的论文结果可能动辄上万甚至几十万,然而网站限制单次导出条数为1000(如果需要引文字段则仅500,仅导出为txt可包含引用详细信息),需要导出几十上百次,手动做太费神,因此写一个爬虫脚本自动导出。

2022.1.6旧版web of science正式下线了,这里是对新版网站重新开发的自动化导出代码。

使用本代码需要:

  • 国内大学学生账号(登录wos使用)
  • 火狐浏览器
  • geckodriver 0.24.0 (放在爬虫代码同一个文件夹下)

严格来说本代码属于半自动化导出,考虑到开发效率等因素,有两处在首次导出时需要手动操作,后文细说。

遇到“selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: …”的报错首先排查网络问题,可以把对应代码行之前的浏览器等待时间加长。

正文

代码情况:

  • 输入:wos检索结果网址、需要导出的条数、导出结果存储路径
  • 输出:导出文件(格式自选,一般txt/excel)

1、需要导入的包,以及测试入口。

其中url是在完成wos检索之后的检索页面网址。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import os
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

if __name__=='__main__':

    '''WOS“检索结果”页面的网址'''
    url = 'https://www.webofscience.com/wos/woscc/summary/64c4e5ff-832d-476d-8112-51e908a600b1-1d5405d5/relevance/1'

    startdownload(url,80195,'/Users/username/folder',False) # 主要函数
    print('Done')

2、主要函数

两次手动操作:

  • 首次打开wos必须登录, 在学校统一身份认证处需要手动输入信息并点击登录;
  • 第一次导出时需要手动修改文件处理方式为"保存文件", 并勾选"以后都采用相同动作处理此类文件"

输入参数见函数说明。

  • 选择导出格式处给出了excel和txt两种,默认excel,可自选。
def startdownload(url,record_num,SAVE_TO_DIRECTORY,record_format='excel',reverse=False):
    '''url -> 检索结果网址; \n
       record_num -> 需要导出的记录条数(检索结果数); \n
       SAVE_TO_DIRECTORY -> 记录导出存储路径(文件夹);\n
       record_format -> 导出记录格式, default='excel';\n
       reverse -> 是否设置检索结果降序排列, default=False \n
       ----------------------------------------------------
       tip1:首次打开wos必须登录,在学校统一身份认证处需要手动输入验证码并点击登录;
       tip2:第一次导出时需要手动修改文件处理方式为"保存文件",并勾选"以后都采用相同动作处理此类文件"
    '''
    # SAVE_TO_DIRECTORY = '/Users/chenzijing/Desktop/研/毕业论文/毕设研/代码/论文数据'#/firefox'
    fp = webdriver.FirefoxProfile()
    fp.set_preference('browser.download.dir', SAVE_TO_DIRECTORY)
    fp.set_preference("browser.download.folderList", 2)
    fp.set_preference("browser.download.manager.showWhenStarting", False)
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain")
    browser = webdriver.Firefox(executable_path=r'geckodriver',firefox_profile=fp)
    browser.get(url)
    time.sleep(3)
    login(browser)
    browser.get(url)
    time.sleep(5)
    '''获取需要导出的文献数量'''
    # record_num = int(browser.find_element_by_css_selector('.brand-blue').text)
    # 按时间降序排列
    if reverse:
        browser.find_element_by_css_selector('.top-toolbar wos-select:nth-child(1) button:nth-child(1) span:nth-child(2)').click()
        browser.find_element_by_css_selector("div.wrap-mode:nth-child(2) span:nth-child(1)").click()
        time.sleep(3)
    # 叉掉弹窗
    browser.find_element_by_css_selector('#onetrust-accept-btn-handler').click()
    time.sleep(1)
    browser.find_element_by_css_selector('#pendo-close-guide-7176fce7').click()
    # 开始导出
    start = 1 # 起始记录
    i = 0 # 导出记录的数字框id随导出次数递增
    while start<record_num:
        browser.find_element_by_css_selector('button.cdx-but-md:nth-child(2) span:nth-child(1)').click() # 导出
        # 选择导出格式
        if record_format=='excel':
            browser.find_element_by_css_selector('#exportToExcelButton').click() # 选择导出格式为excel
        else:
            browser.find_element_by_css_selector('#exportToFieldTaggedButton').click() # 选择导出格式为txt
        browser.find_element_by_css_selector('#radio3 label:nth-child(1) span:nth-child(1) span:nth-child(1)').click() # 选择自定义记录条数
        send_key(browser,'#mat-input-%d'%i,start)#mat-input-2
        send_key(browser,'#mat-input-%d'%(i+1),start+999)
        browser.find_element_by_css_selector('.margin-top-5 button:nth-child(1)').click() # 更改导出字段
        browser.find_element_by_css_selector('div.wrap-mode:nth-child(3) span:nth-child(1)').click() # 选择所需字段(3完整)(4自定义)
        browser.find_element_by_css_selector('div.flex-align:nth-child(3) button:nth-child(1)').click() # 点击导出
        time.sleep(10) # 等待下载完毕
        # 导出文件按照包含的记录编号重命名
        rename_file(SAVE_TO_DIRECTORY,'record-'+str(start)+'-'+str(start+999))
        start = start + 1000
        i = i + 2
    time.sleep(10)
    browser.quit()

3、主要函数中调用的其他函数

login函数中“学校的统一身份验证”部分可以选择手动,或者根据学校网站自行修改。
其他无需修改。

def login(browser):
    '''登录wos'''
    # 通过CHINA CERNET Federation登录
    browser.find_element_by_css_selector('.mat-select-arrow').click()
    browser.find_element_by_css_selector('#mat-option-9 span:nth-child(1)').click()
    browser.find_element_by_css_selector('button.wui-btn--login:nth-child(4) span:nth-child(1) span:nth-child(1)').click()
    time.sleep(3)
    login = browser.find_element_by_css_selector('#show')
    login.send_keys('xxxx大学') # 改成你的学校名
    time.sleep(0.5)
    browser.find_element_by_css_selector('.dropdown-item strong:nth-child(1)').click()
    browser.find_element_by_css_selector('#idpSkipButton').click()
    time.sleep(1)
    #! 跳转到学校的统一身份验证(想自动输入账号密码就把下面两行注释解除,按照自己学校的网址修改一下css选择器路径)
    # browser.find_element_by_css_selector('input#un').send_keys('你的学号') # 改成你的学号/账号
    # browser.find_element_by_css_selector('input#pd').send_keys('你的密码') # 改成你的密码
    time.sleep(20) #! 手动输入账号、密码、验证码,点登录
def send_key(browser,path,value):
    '''browser -> browser;\n
       path -> css选择器;\n
       value -> 填入值
    '''
    markto=browser.find_element_by_css_selector(path)
    markto.clear()
    markto.send_keys(value)
def rename_file(SAVE_TO_DIRECTORY,name,record_format='excel'):
    '''导出文件重命名 \n
       SAVE_TO_DIRECTORY -> 导出记录存储位置(文件夹);\n
       name -> 重命名为
    '''
    # files = list(filter(lambda x:'savedrecs' in x and len(x.split('.'))==2,os.listdir(SAVE_TO_DIRECTORY)))
    while True:
        files = list(filter(lambda x:'savedrecs' in x and len(x.split('.'))==2,os.listdir(SAVE_TO_DIRECTORY)))
        if len(files)>0:
            break
    files = [os.path.join(SAVE_TO_DIRECTORY, f) for f in files]  # add path to each file
    files.sort(key=lambda x: os.path.getctime(x))
    newest_file = files[-1]
    # newest_file=os.path.join(SAVE_TO_DIRECTORY,'savedrecs.txt')
    if record_format=='excel':
        os.rename(newest_file, os.path.join(SAVE_TO_DIRECTORY, name+".xls"))
    else:
        os.rename(newest_file, os.path.join(SAVE_TO_DIRECTORY, name+".txt"))

4、导出结果

部分结果,展示导出形式。

到此这篇关于Python Selenium自动化导出新版WOS(web of science)检索结果的文章就介绍到这了,更多相关Python Selenium自动化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python + selenium 自动化测试框架详解

    目录 自动化测试框架 1.基础层(通用层) 2.功能层(页面层) 3.业务层 4.用例层 4层框架对应的项目工程 总结 自动化测试框架 项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里. 写通用的代码的. 其他3层想要的话,就可以直接调用. 例如: 读取测试数据的代码,读取配置信息的代码:截图的代码的,定位元素的代码等等 2.功能层(页面层) 功能层: pages 封装页面的. 把页面封装成类.类中包含:属性和方法 把页面上的界面元素定义成类的属

  • Python+selenium 自动化快手短视频发布的实现过程

    第一章:效果展示 ① 效果展示 ② 素材展示 一个为视频,另一个为像素大小不小于视频的封面. 第二章:实现过程 ① 调用已启用的浏览器 通过调用已启用的浏览器,可以实现直接跳过每次的登录过程. from selenium import webdriver options = webdriver.ChromeOptions() options.add_experimental_option("debuggerAddress", "127.0.0.1:5003") dr

  • 关于Python Selenium自动化导出新版WOS(web of science)检索结果的问题

    selenium 介绍 selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选 selenium ,因为它相比 QTP 有诸多有点: 免费,也不用再为破解 QTP 而大伤脑筋 小巧,对于不同的语言它只是一个包而已,而 QTP 需要下载安装1个多 G 的程序. 这也是最重要的一点,不管你以前更熟悉 C. java.ruby.python.或都是 C# ,你都可以通过 selenium 完成自动化测试,而 QTP 只支持 VBS 支持多平台:windows.linux.

  • Python+Selenium自动化环境搭建与操作基础详解

    目录 一.环境搭建 1.python安装 2.pycharm下载安装 3.selenium下载安装 4.浏览器驱动下载安装 二.Selenium简介 (1)SeleniumIDE (2)SeleniumRC (3)SeleniumWebDriver (4)SeleniumGrid 三.常用方法 1.浏览器操作 2.如何获取页面元素 3.查找定位页面元素的方法 4.操作方法 5.下拉框操作 6.WINDOS弹窗 7.iframe内嵌页面处理 8.上传文件 9.切换页面 10.截图 11.等待时间

  • 学习Python selenium自动化网页抓取器

    直接入正题---Python selenium自动控制浏览器对网页的数据进行抓取,其中包含按钮点击.跳转页面.搜索框的输入.页面的价值数据存储.mongodb自动id标识等等等. 1.首先介绍一下 Python selenium ---自动化测试工具,用来控制浏览器来对网页的操作,在爬虫中与BeautifulSoup结合那就是天衣无缝,除去国外的一些变态的验证网页,对于图片验证码我有自己写的破解图片验证码的源代码,成功率在85%. 详情请咨询QQ群--607021567(这不算广告,群里有好多P

  • Python + selenium自动化环境搭建的完整步骤

    前言 本文主要介绍了关于Python+selenium自动化环境搭建的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 Python +selenium+googledriver 小白的血泪安装使,不停的总结写心得是理解透彻的毕竟之路 一,python的安装: 首先去Python的官网下载安装包:https://www.python.org/  ,大家也可以通过我们进行下载://www.jb51.net/softs/415916.html 2.下载完成后如下图所示 3.双

  • Python selenium 自动化脚本打包成一个exe文件(推荐)

    目标 打包Python selenium 自动化脚本(如下run.py文件)为exe执行文件,使之可以直接在未安装python环境的windows下运行 run.py文件源码: 文件路径:D:\gongcheng 注:chromedriver.exe 文件在D:\gongcheng目录下 #!/usr/bin/python3 # encoding:utf-8 from selenium import webdriver import time as t brw = webdriver.Chrom

  • python+selenium自动化框架搭建的方法步骤

    环境及使用软件信息 python 3 selenium 3.13.0 xlrd 1.1.0 chromedriver HTMLTestRunner 说明: selenium/xlrd只需要再python环境下使用pip install 名称即可进行对应的安装. 安装完成后可使用pip list查看自己的安装列表信息. chromedriver:版本需和自己的chrome浏览器对应,百度下载. 作用:对chrome浏览器进行驱动. HTMLTestRunner:HTMLTestRunner是Pyt

  • Python Selenium自动化获取页面信息的方法

    1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import time browser = webdriver.Chrome() browser.get('https://www.baidu.com') #打印网页标题 print(browser.title) #输出内容:百度一下,你就知道 2.获取页面URL current_url:获取当前页面的URL from selenium import webdriver

  • python+selenium自动化实战携带cookies模拟登陆微博

    首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/12/29 16:27 # @Author : huni # @File : 微博cookies.py # @Software: PyCharm from selenium import

  • 手把手教你搭建python+selenium自动化环境(图文)

    目录 第一步:安装python解释器 第二步:安装pycharm编译器. 第三步:安装selenium库 第四步:下载浏览器的驱动 第五步:打开pycharm写第一个自动化demo验证环境是否有问题 快速+简单搭建环境.如果有问题,欢迎进群讨论留言. 第一步:安装python解释器 官网地址:https://www.python.org/ 自动化测试最好下载3.7的. 下载完成后打开这个文件,然后傻瓜式安装. 安装好后,win+r打开命令行窗口,输入python.如果显示下图,就说明安装成功.

随机推荐