基于Selenium的傻瓜自动化提取文字信息

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Selenium的傻瓜自动化提取文字信息相关的知识,希望对你有一定的参考价值。

今天,韩老师有一个比较机械性的工作向我求助,于是我写了一份脚本为她自动化的实现手动执行的功能。

功能说明

需要键入500+个汽车的信息查询获得汽车车型

流程说明

  1. 从csv文件中获取所有汽车VIN码的数据
  2. 将车牌信息输入等待响应,可能出现3种结果:
    1) 页面重新刷新,则说明查不到该车型,返回NAN;
    2) 页面中该内容为空,返回NAN;
    3) 找到车型信息,返回该信息。
  3. 返回值

代码&说明

使用selenium库来模拟向浏览器发送指令并操作。

import csv
from selenium import webdriver
import warnings
import time
import selenium

#数据预处理
def read_csv(filename):
    csv_reader = csv.reader(open(filename))#读取文件
    datas = []#['a', 'b',...]
    for row in csv_reader:
        datas.append(row)
    return datas

#网页处理
def process_web(source_web, data):
    #异常处理
    with warnings.catch_warnings():  # 忽视Warning
        warnings.simplefilter("ignore")
        warnings.warn("deprecated", DeprecationWarning)

        #固定的语法,复制就可以了,
        browser = webdriver.Edge(
        executable_path="D:\\\\Program Files\\\\Python38\\\\Lib\\\\site-packages\\\\selenium\\\\msedgedriver.exe")  # 声明浏览器对象
        browser.get(source_web)# 1.进入网页
        #点击fn+f12,进入浏览器的开发者模式,通过小箭头点一下想要查找到元素,定位源代码位置
        browser.find_element_by_xpath('//*[@id="vin"]').send_keys(data)#输入值
        browser.find_element_by_xpath('//*[@id="login-button"]').click()#点击查询按键
        time.sleep(10)#担心网页刷不出来,导致查询失败

        try:# try里是正常的业务逻辑
            #很多的id,可能有一个,又可能不止
            datas = browser.find_element_by_id('VehicleInfoLinkageModel_InfoShow') \\
                .find_element_by_id('modelShowConentArea') \\
                .find_elements_by_class_name('row')
            id = datas[0].get_attribute("id")#找到了id,用于拼接xpath
            xpath = '//*[@id="' + id + '"]/div[1]/table/tbody/tr[3]/td[2]'
            return_data = browser.find_element_by_xpath(xpath).text # 获取车型的文本
            return return_data
        except selenium.common.exceptions.NoSuchElementException:
            return 'NaN'
        except IndexError:
            return 'NaN'

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    filename = "D:\\\\..韩雯宝贝\\\\车型号.csv"
    csv_data = read_csv(filename)# 把csv文件里的数据,存到我们的csv_data变量(列表)里

    source_web = "http://cloud.dat881.com/embed/front/queryVINPage.jsp?levelSessionId=hhhyje375b5b42a7015b5b57eb2145960"

    for data in csv_data:
        print_data = process_web(source_web, data)#不管数据对不对,对的打印出来,不对的打印NaN
        print(print_data)

最终打印的结果

以上是关于基于Selenium的傻瓜自动化提取文字信息的主要内容,如果未能解决你的问题,请参考以下文章

基于Selenium的傻瓜自动化提取文字信息

两款傻瓜化小白爬虫工具推荐

两款傻瓜化小白爬虫工具推荐

selenium自动化实战-基于python语言(三: 编写脚本)

基于Tesseract模块Python实现提取图片中的文字信息(安装+使用教程)

Selenium 查找节点