跟着导师做项目,导师想起一出是一出的真是醉了,我只吐一吐槽。
导师拿了一个利用了w3af但自己重新改过的一个开源项目的代码交给我们,说借鉴他们改写w3af的成果,将自己的前端和他们的审计插件结合起来,好,听起来不是很难,那我们就开始好了。
拿到代码一看真是呵呵了,大部分的代码其实跟我们都没半毛钱关系,但最有关系的那部分,插件的初始化和爬虫部分,竟然调的htmlunit这个第三方jar包。Oh,shit,python和java要怎么来调!!我们先来解决htmlunit是个什么东西的问题。查资料说大概可以认为htmlunit是个无界面的浏览器,特点是速度很快,使用方便,而且能够应付javascript和Ajax,听起来很不错,好吧,那我就留着你吧。接下来想怎么实现python和java对接,于是就找到了jpype。Jpype是什么呢,就是python和java对接的接口,jpype实现了数据类型,对象调用,线程调度等差异的转化问题,看样子貌似问题很快就会被解决。等等,先别高兴太早。
一开始没找到jpype在ubuntu下的安装方法被老师熊了一顿,安装方法:
sudo apt-get install python-jpype
对,我就是这么丢人!
#!/usr/bin/env python
#coding : utf-8
from jpype import *
jvmpath = getDefaultJVMPath()
startJVM(jvmpath, "-ea", "-Djava.class.path=.")
TA = JPackage('test').TestApi
jd = TA()
jd.printData('1234')
s = jd.getData('a')
print s
shutdownJVM();
传说这就是调用第三方jar的方法,可我就卡在那个JPackage上,怎么写路径就是找不到htmlunit的webclient,oh,shit,我也是醉了。
神奇的老师于是随手甩给我了一个网址:http://sunjun041640.blog.163.com/blog/static/2562683220131024114610625/
说这个可以把jpype甩开,因为selenium是封装好的可以自己调htmlunit,于是我又乐呵呵的扔掉jpype钻进了selenium的怀抱。等等,这个selenium是干嘛的,其实是一个高度封装了的可以召唤各种浏览器的神器。借助它貌似就可以调到htmlunit了。Ubuntu安装:
$sudo pip install -U selenium
貌似很简单嘛,找段初始化的代码调试下:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://www.yahoo.com") # Load page
assert "Yahoo!" in browser.title
elem = browser.find_element_by_name("p") # Find the query box
elem.send_keys("seleniumhq" + Keys.RETURN)time.sleep(0.2) # Let the page load, will be added to the APItry: browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]")
except NoSuchElementException:
assert 0, "can't find seleniumhq"browser.close()
嗯,跑起来还不错的样子,调了一个fireworf浏览器出来,查询了代码里的信息。下面试一下htmlunit能不能调到:
from selenium import webdriver
From selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Remote(desired_capabilities=DesiredCapabilities.HTMLUNIT)
#browser = webdriver.DesiredCapabilities.HTMLUNIT() # Get local session of firefox
browser.get("http://www.yahoo.com") # Load page
assert "Yahoo" in browser.title
elem = browser.find_element_by_name("p") # Find the query box
elem.send_keys("seleniumhq" + Keys.RETURN)
time.sleep(0.2) # Let the page load, will be added to the API
try:
browser.find_element_by_xpath("//a[@data-bk='5174.1']")
print"ok"
except NoSuchElementException:
assert 0, "can't find seleniumhq"
browser.close()
Oh,shit这个就不行了,百度一下(Google有时能用有事不能用真是蛋疼)说remote是远程调用还要下个jar包的server,那我就下吧。csdn下了一个,妈蛋invalid jar,我以为是我电脑的问题,结果第二天下了个新的jar就没问题了让我去死好吧。
在ubuntu下切到server jar的目录下,启动server命令,
java -jar selenium-server.jar
然后再跑上面的程序,按理说不会有问题了应该可以正常使用了。可我的server里报错了哦,shit。
Google打不开我猜可能因为我的网就是连不到Google,百度报css的错我猜是在读百度的网站读的有问题。跟老师沟通完老师坚定的说,放弃selenium吧,问我有没有别的方法,我说python有个自带的urllib库可以用,就是功能不知道够不够。
老师说那就urllib。然后就走人了。没一会发QQ来了,继续用htmlunit,学姐用selenium调通了。
我真想一口鲜血喷屏幕上!!