当从代码进行Web浏览时,如何将信息发送到<;input.*type=“;提交”>;并检索得到的链接
本文关键字:提交 type input gt 链接 检索 lt 浏览 Web 代码 信息 | 更新日期: 2023-09-27 18:20:51
类似的线程可能是:
如何使用.Net以编程方式将信息发送到C#中的web服务
使用链接提交表单时保持按钮提交值
查看如何使用输入类型=提交表单发送多个值
当输入名称为"提交"时,如何使用Javascript发送表单
如何使用带有<输入type="button">
以上这些似乎几乎都回答了这个问题。。。但我完全感到困惑。我认为类似于"Net.Post(something)"的东西是如何完成的。。。但我不确定。
我目前正在使用F#,我已经学会了如何解析链接。我还发现了如何用正则表达式捕捉各种搜索栏和提交按钮
我想用我的代码在搜索引擎上搜索一些东西,特别是:
首先,获取HTML
第二步,清除各种按钮、文本栏和链接的HTML
第三个,使用一些未知的方法/设备/工具/函数将搜索线程发送到文本框。。。
第四个,模拟鼠标实际点击网站上出现的提交"按钮"。。。
然后,在收到服务器的响应后,从下一个站点提取HTML
这是我的链接代码:
type Url(x:string)=
member this.Tostring = sprintf "%A" x
member this.Request = System.Net.WebRequest.Create(x)
member this.Response = this.Request.GetResponse()
member this.Stream = this.Response.GetResponseStream()
member this.Reader = new System.IO.StreamReader(this.Stream)
member this.Html = this.Reader.ReadToEnd()
let linkex = "href='s*'"[^'"h]*(http://[^&'"]*)'""
let getLinks (txt:string) = [for m in Regex.Matches(txt,linkex)
-> m.Groups.Item(1).Value ]
let collectLinks (url:Url) = url.html
|> getLinks
我知道如何获取搜索框字符串之类的。。。问题是,当我去谷歌网站,像抓取链接一样抓取搜索栏,用我的搜索字符串更新值字段时,我如何将更新后的搜索栏提交到谷歌的服务器?
其次,如果我想更新它,然后模拟鼠标点击,我该怎么做?
换句话说,我想像用户与网站互动一样与网站互动。
本质上有两个选项-一些网页使用HTTPGET接受数据(这意味着数据作为URL的一部分发送),另一些则使用HTTPPOST(这意味着您的数据作为请求的主体发送)。
如果您使用的是Google,那么您可以使用HTTPGET并将查询字符串放入URL中。例如,您只需下载具有以下URL的网页:https://www.google.com/search?q=hello.因此,您所需要做的就是生成如下URL:
let search = sprintf "http://www.google.com/search?q=%s"
如果你想从F#发送HTTPPOST请求,那么你需要创建一个包含编码表单中表单值的请求体
open System.Text
open System.IO
open System.Net
// URL of a simple page that takes two HTTP POST parameters. See the
// form that submits there: http://www.snee.com/xml/crud/posttest.html
let url = "http://www.snee.com/xml/crud/posttest.cgi"
// Create & configure HTTP web request
let req = HttpWebRequest.Create(url) :?> HttpWebRequest
req.ProtocolVersion <- HttpVersion.Version10
req.Method <- "POST"
// Encode body with POST data as array of bytes
let postBytes = Encoding.ASCII.GetBytes("fname=Tomas&lname=Petricek")
req.ContentType <- "application/x-www-form-urlencoded";
req.ContentLength <- int64 postBytes.Length
// Write data to the request
let reqStream = req.GetRequestStream()
reqStream.Write(postBytes, 0, postBytes.Length);
reqStream.Close()
// Obtain response and download the resulting page
// (The sample contains the first & last name from POST data)
let resp = req.GetResponse()
let stream = resp.GetResponseStream()
let reader = new StreamReader(stream)
let html = reader.ReadToEnd()
此外,每一步都使用type
和member
有点奇怪。每次访问成员时都会重新执行它们,所以您编写的代码是非常不确定的。您应该使用let
绑定。