写一个程序在别人的网站上做点什么,这样做不可能吗?

时间:2014-12-25 03:14:40

标签: javascript c# python cross-domain same-origin-policy

一般情况下,我在浏览器中打开其他网站,比如google.com,在搜索框中输入内容,然后点击搜索。

是否无法编写程序来执行此操作并在结果页面上找到某些内容,而不是手动执行此操作?

我尝试过javascript,但似乎无法绕过同源限制。

PS:不仅搜索,也许我还需要输入用户名,密码和登录。 除了javascript,我正在使用C#。

2 个答案:

答案 0 :(得分:0)

是的,您可以在C#(winforms)中执行此操作。首先,您需要创建一个Internet Explorer浏览器实例,然后初始化其参数,比如它的大小,位置,URL(www.google.com)等.URL指定应该在IE浏览器中加载的网站。

在此之后你需要创建一个处理网站(www.google.com)控件的功能。确保只在网站后调用此函数  完全加载。您可以使用事件处理程序。

源代码: -
创建浏览器实例

this.webBrowser1 = new System.Windows.Forms.WebBrowser();

初始化浏览器参数

this.webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill;
this.webBrowser1.Location = new System.Drawing.Point(0, 0);
this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
this.webBrowser1.Name = "webBrowser1";
this.webBrowser1.Size = new System.Drawing.Size(903, 448);
this.webBrowser1.TabIndex = 0;
// specify your url here
this.webBrowser1.Url = new System.Uri("www.google.com", System.UriKind.Absolute);

创建事件处理程序

this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted);

处理网站中的控件:

//sets user name text box to ganesh  
webBrowser1.Document.All.GetElementsByName("username")[0].SetAttribute("Value", "ganesh");

答案 1 :(得分:0)

实际上,唯一的方法是使用代理服务器,但您可以使用节点在javascript中轻松创建一个:

var http = require('http');

http.createServer(onRequest).listen(3000);

function onRequest(client_req, client_res) {
  console.log('serve: ' + client_req.url);

  var options = {
    hostname: 'www.google.com',
    port: 80,
    path: client_req.url,
    method: 'GET'
  };

  var proxy = http.request(options, function (res) {
    res.pipe(client_res, {
      end: true
    });
  });

  client_req.pipe(proxy, {
    end: true
  });
}

以上代码将返回google的主页。由于您自己的本地服务器正在返回页面,因此您不再需要担心跨域问题,并且可以随意使用数据。