基于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)

最终打印的结果

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值