一般情况下,我在浏览器中打开其他网站,比如google.com,在搜索框中输入内容,然后点击搜索。
是否无法编写程序来执行此操作并在结果页面上找到某些内容,而不是手动执行此操作?
我尝试过javascript,但似乎无法绕过同源限制。
PS:不仅搜索,也许我还需要输入用户名,密码和登录。 除了javascript,我正在使用C#。
答案 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的主页。由于您自己的本地服务器正在返回页面,因此您不再需要担心跨域问题,并且可以随意使用数据。