Python爬虫——2017高校网络信息安全管理运维挑战赛:快速计算

如题,遇到的题目是这个样子的
这里写图片描述
每次刷新数字就变了。。。
第一眼我还是想手算的。。。然后我看见了那个半秒。。。必须计算机来算啊!!!

网页的源码是这样的
这里写图片描述

只要能从网页上获取数据,岂不是美滋滋

第一次,我使用java来获取数据

import java.io.BufferedReader;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.net.HttpURLConnection;  
import java.net.URL;  
import java.util.ArrayList;  
import java.util.List;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public class JavaApplication1 {  
    public static void main(String[] args) throws Exception {  
        //目的网页URL地址  
        int ans = getURLInfo("http://202.120.7.220:2333/","utf-8");

    }  
    public static int getURLInfo(String urlInfo,String charset) throws Exception {  
        //读取目的网页URL地址,获取网页源码  
        URL url = new URL(urlInfo);  
        HttpURLConnection httpUrl = (HttpURLConnection)url.openConnection();  
        InputStream is = httpUrl.getInputStream();  
        BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));  
        StringBuilder sb = new StringBuilder();  
        String line;  
        while ((line = br.readLine()) != null) {  
            //这里是对链接进行处理  
            line = line.replaceAll("</?a[^>]*>", "");  
            //这里是对样式进行处理  
            line = line.replaceAll("<(\\w+)[^>]*>", "<$1>");  
            sb.append(line);  
        }  
        is.close();  
        br.close();  
        //获得网页源码  
        return getDataStructure(sb.toString().trim());  
    }  
    static Pattern proInfo   
           = Pattern.compile("<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>", Pattern.DOTALL);  
    private static int getDataStructure(String str) {  
        System.out.println(str);
        String s = str.substring(188);
        System.out.println(s);
        int i = s.indexOf("=");
        System.out.println(i);
        String gongshi = s.substring(0,29);
        System.out.println(gongshi);
        i = gongshi.indexOf("*");
        System.out.println(i);
        int num1 = Integer.parseInt(gongshi.substring(0,i));
        gongshi = gongshi.substring(i+1);
        System.out.println(gongshi);
        i = gongshi.indexOf("+");
        int num2 = Integer.parseInt(gongshi.substring(0,i));
        gongshi = gongshi.substring(i+1);
        System.out.println(gongshi);
        i = gongshi.indexOf("*");
        int num3 = Integer.parseInt(gongshi.substring(0,i));
        gongshi = gongshi.substring(i+2);
        System.out.println(gongshi);
        i = gongshi.indexOf("+");
        int num4 = Integer.parseInt(gongshi.substring(0,i));
        gongshi = gongshi.substring(i+1);
        System.out.println(gongshi);
        i = gongshi.indexOf(")");
        int num5 = Integer.parseInt(gongshi.substring(0,i));

        int an = num1*num2+num3*(num4+num5);
        System.out.print(an);
        return an;
    }   
}  

答案当然算出来了,然而,不知道怎么使用java填充标签和点击按钮。。。。

遭受1w点暴击伤害。。。

然后,我想到的python,查资料得知可以利用Splinter开发浏览器自动化操作
需要安装Cython、lxml、selenium、Splinter
这些全部可以通过pip安装,或者下载whl文件进行安装

然后,需要安装火狐浏览器,因为Splinter默认使用火狐浏览器

获取数字的代码如下:

import time
from splinter import Browser
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

def splinter(url):

    browser = Browser()
    print("1")
    browser.visit(url)
    print("1")
    str=browser.find_by_tag('form')
    #str= browser.find_option_by_text('')
    print(str)
    str=browser.html
    print(str)
    s = str[179:len(str)]
    print(s)
    i=s.index('*')
    num1= s[0:i]
    print(num1)
    s = s[i+1:len(s)]
    print(s)
    i = s.index('+')
    num2 = s[0:i]
    print(num2)
    s = s[i + 1:len(s)]
    print(s)
    i = s.index('*')
    num3 = s[0:i]
    print(num3)
    s = s[i + 2:len(s)]
    print(s)
    i = s.index('+')
    num4 = s[0:i]
    print(num4)
    s = s[i + 1:len(s)]
    print(s)
    i = s.index(')')
    num5 = s[0:i]
    print(num5)
    ans = int(num1)*int(num2)+int(num3)*(int(num4)+int(num5))
    print(ans)
    browser.find_by_name('v').fill(ans) # 填充答案
    browser.find_by_value('提交').click() #点击提交按钮

if __name__ == '__main__':
    websize3 ='http://202.120.7.220:2333/' # 题的URL
    splinter(websize3)

成功获取答案

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值