单击按钮(在网页上)即可运行客户端python脚本
因此,我试图修改一些HTML,使其具有一个按钮,用于启动python脚本,该脚本作用于自己系统中的几个文件 更具体地说,我有一个python脚本,它可以读取snort日志并生成一个指向新网站的链接(实际上是一个IP地址,它接受数据包捕获流搜索的参数) 我正在尝试将此脚本实现为网站上的按钮。 -注意:如果单击按钮的人需要在自己的机器上安装script.py,则可以 我试着在这个问题上做我的家庭作业,但似乎有无限的选择——其中大多数都没有得到任何两方的同意。单击按钮(在网页上)即可运行客户端python脚本,python,html,frameworks,Python,Html,Frameworks,因此,我试图修改一些HTML,使其具有一个按钮,用于启动python脚本,该脚本作用于自己系统中的几个文件 更具体地说,我有一个python脚本,它可以读取snort日志并生成一个指向新网站的链接(实际上是一个IP地址,它接受数据包捕获流搜索的参数) 我正在尝试将此脚本实现为网站上的按钮。 -注意:如果单击按钮的人需要在自己的机器上安装script.py,则可以 我试着在这个问题上做我的家庭作业,但似乎有无限的选择——其中大多数都没有得到任何两方的同意。 我需要一个框架吗?我能不能使用一些或HT
我需要一个框架吗?我能不能使用一些或HTML代码中的东西从目录中调用python脚本?简短回答:你不能 您无法从浏览器访问用户计算机上的文件,更不用说执行它们了。想象一下,这将是一个多么大的安全漏洞 但是,您可以在许多GUI工具包(Qt或wx具有web视图或类似工具)中实现自己的简单web浏览器(例如,显示单个页面)。或者,您需要为正在使用的浏览器开发(或找到)一个插件/插件,并与之通信。这将取决于每个浏览器等。我不知道这是否可行。或者,用户将下载一个文件,他将选择运行该文件而不是保存该文件,该文件将执行您的脚本
实际上,我刚刚看到了一个插件,它基本上是您安装的(基于IronPython和Silverlight),但我不确定您是否可以执行用户系统上的脚本。它可以执行页面中嵌入的代码。IronPython可能是您正在寻找的解决方案: 通过下面链接中提供的教程和代码,您应该能够创建对事件(如您提到的html“按钮”)做出反应的html元素 我一直在使用IronPython,在脚本的内部和外部调用方面都取得了成功。下面的教程很可能包含您可能遇到的任何其他问题 helloworld.html- IronPython警报示例,文档中的内部python脚本 要在浏览器中开发Python应用程序,您只需要最喜欢的文本编辑器;打开它,创建一个HTML文件,引用dlr.js,然后您可以使用脚本标记来运行Python代码: dom.py IronPython示例:用于添加DOM元素并在单击时将其HTML内容更改为“哎哟!”: 注意:IronPython需要SilverLight,因此它只适用于FireFox或Safari 与您的问题相关的优秀教程:
老年退休金问题的替代解决方案: 解决方案概要:
<!DOCTYPE html>
<html>
<head>
<title>Google Email Search</title>
</head>
<body>
<h1>Script Options</h1>
<form action="/cgi-bin/call.sh" method="get">
<TABLE BORDER="1">
<TR>
<TD>Keyword:</TD>
<TD><input type="text" name="query" value="Query"></TD>
</TR>
<TR>
<TD># of Pages:</TD>
<TD><input type="text" name="pages" value="1"></TD>
</TR>
<TR>
<TD>Output File Name:</TD>
<TD><input type="text" name="output_name" value="results"></TD>
</TR>
<TR>
<TD>E-mail Address:</TD>
<TD><input type="text" name="email_address" value="example@gmail.com">
</TD>
</TR>
<TR>
<TD><input type="submit" value="Submit"></TD>
</TR>
</TABLE>
</form>
</body>
</html>
完整的工作示例位于此处:
免责声明这是我的git-使用分叉项目来显示此功能。因此,假设我将python和snort日志文件发送给我自己(在另一台机器上)。我无法创建一个按钮,当我从另一台机器访问网页并单击时,该按钮将触发python代码(在同一台机器上)以相同的名称、位置等运行。不,也许我提到的最后一个选项可以实现这一点,尽管我从未尝试过。你可以将该文件嵌入HTML中,如果可能的话,也可以将文件放在服务器上,以便轻松访问…顺便说一句-只是浏览了你发布的链接,我想我已经对我所做的事情有了更好的理解。非常感谢Thoswell,目前我正在整理一份可能的清单(我要到明天早上才能真正深入研究)。不过,到目前为止,我认为我的首选选项如下:使用py2exe创建一个可执行文件(通过您关于可下载文件的建议提醒我这一点);以某种方式使网页可以访问snort文件,并嵌入代码(ironPython风格);只是让用户下载我的该死的代码并在他自己的python外壳上运行它!还考虑使用python到java编译器。没有嵌入Javascript的经验,但从我目前发现的情况来看,它似乎更兼容HTML。但是,这并没有处理snort警报文件Accessibilityyyyah,请从开始就有一个好的、写得好的格式化文章。@mhene在回答之前请阅读。
from Microsoft.Scripting.Silverlight import Repl
if 'document' not in globals():
import System
document = System.Windows.Browser.HtmlPage.Document
if 'window' not in globals():
import System
window = System.Windows.Browser.HtmlPage.Window
class PythonRepl(object):
__ironpython__ = 'silverlightDlrRepl1'
__minimize__ = 'silverlightDlrWindowLink'
__container__ = 'silverlightDlrWindowContainer'
def __init__(self):
self.repl = Repl.Show('python')
def hide_all_panels(self):
window.Eval("sdlrw.hideAllPanels(document.getElementById(\"%s\"))" % self.__minimize__)
def show_panel(self, id):
window.Eval("sdlrw.showPanel(\"%s\")" % id)
def show_ironpython(self):
self.show_panel(self.__ironpython__)
def remove(self):
document.Body.RemoveChild(document.silverlightDlrWindowContainer)
def show():
prepl = PythonRepl()
repl = prepl.repl
import sys
sys.stdout = repl.OutputBuffer
sys.stderr = repl.OutputBuffer
return prepl
if document.QueryString.ContainsKey('console'):
prepl = show()
if document.QueryString['console'] == 'hide':
prepl.hide_all_panels()
else:
prepl.show_ironpython()
dir(document)
div = document.CreateElement("div")
div.innerHTML = "Hello from Python!"
document.Body.AppendChild(div)
div.id = "message"
div.SetStyleAttribute("font-size", "24px")
def say_ouch(o, e):
o.innerHTML = "Ouch!"
document.message.events.onclick += say_ouch
<!DOCTYPE html>
<html>
<head>
<title>Google Email Search</title>
</head>
<body>
<h1>Script Options</h1>
<form action="/cgi-bin/call.sh" method="get">
<TABLE BORDER="1">
<TR>
<TD>Keyword:</TD>
<TD><input type="text" name="query" value="Query"></TD>
</TR>
<TR>
<TD># of Pages:</TD>
<TD><input type="text" name="pages" value="1"></TD>
</TR>
<TR>
<TD>Output File Name:</TD>
<TD><input type="text" name="output_name" value="results"></TD>
</TR>
<TR>
<TD>E-mail Address:</TD>
<TD><input type="text" name="email_address" value="example@gmail.com">
</TD>
</TR>
<TR>
<TD><input type="submit" value="Submit"></TD>
</TR>
</TABLE>
</form>
</body>
</html>
#!/bin/bash
# Runs the cgi-script, using the shell, using 'get' results from the index html form we parse it to the options in the python script.
echo "Content-type: text/html"
echo ""
echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '<title></title>'
echo '</head>'
echo '<body>'
query=`echo "$QUERY_STRING" | sed -n 's/^.*query=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
pages=`echo "$QUERY_STRING" | sed -n 's/^.*pages=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
output_name=`echo "$QUERY_STRING" | sed -n 's/^.*output_name=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
email_address=`echo "$QUERY_STRING" | sed -n 's/^.*email_address=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
echo '<h1>'
echo 'Running...'
echo '</h1>'
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
cd "$DIR"
python main.py -query $query -pages $pages -o $output_name
echo ''
echo '</body>'
echo '</html>'
#!/usr/bin/env python
from xgoogle.search import GoogleSearch
import urllib2, re, csv, os
import argparse
class ScrapeProcess(object):
emails = [] # for duplication prevention
def __init__(self, filename):
self.filename = filename
self.csvfile = open(filename, 'wb+')
self.csvwriter = csv.writer(self.csvfile)
def go(self, query, pages):
search = GoogleSearch(query)
search.results_per_page = 10
for i in range(pages):
search.page = i
results = search.get_results()
for page in results:
self.scrape(page)
def scrape(self, page):
try:
request = urllib2.Request(page.url.encode("utf8"))
html = urllib2.urlopen(request).read()
except Exception, e:
return
emails = re.findall(r'([A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*)', html)
for email in emails:
if email not in self.emails: # if not a duplicate
self.csvwriter.writerow([page.title.encode('utf8'), page.url.encode("utf8"), email])
self.emails.append(email)
parser = argparse.ArgumentParser(description='Scrape Google results for emails')
parser.add_argument('-query', type=str, default='test', help='a query to use for the Google search')
parser.add_argument('-pages', type=int, default=10, help='number of Google results pages to scrape')
parser.add_argument('-o', type=str, default='emails.csv', help='output filename')
args = parser.parse_args()
args.o = args.o+'.csv' if '.csv' not in args.o else args.o # make sure filename has .csv extension
s = ScrapeProcess(args.o)
s.go(args.query, args.pages)