如题,遇到的题目是这个样子的
每次刷新数字就变了。。。
第一眼我还是想手算的。。。然后我看见了那个半秒。。。必须计算机来算啊!!!
网页的源码是这样的
只要能从网页上获取数据,岂不是美滋滋
第一次,我使用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)
成功获取答案