用 WebBrowser 访问百度
#light
open System
open System.Windows.Forms
open System.IO
open System.Text
let (html:HtmlDocument ref) = ref null
let getPage (url:string) =
// let (html:HtmlDocument ref) = ref null
let handler (sender:obj) (e: WebBrowserDocumentCompletedEventArgs) =
// let handler (sender:obj) (e: _) =
let wb = sender :?> (WebBrowser)
html := (wb.Document)
use wb = new WebBrowser()
wb.Visible<-true
wb.DocumentCompleted.Add(handler wb)
wb.Navigate(url)
while wb.ReadyState <> WebBrowserReadyState.Complete do
Application.DoEvents()
html
let writeToFile filename obj =
let fp = __SOURCE_DIRECTORY__ + "\\" + filename
File.AppendAllText( fp, obj, Encoding.Default )
getPage "http://www.baidu.com"
html.Value.All.Item("wd").SetAttribute("value","XXXXXX")
html.Value.All.Item("su").InvokeMember("click")
let url = (html.Value.All.Item("wd")).OuterHtml
getPage ("http://www.baidu.com" + url )
writeToFile "baidu-Search.txt"
([ for i in html.Value.All do yield i.OuterText] |> Seq.toList |> Seq.reduce (fun a b -> a + b))
后面的一句 getPage 非常重要。没有这一句,运行会没有输出。但是,单步运行是可以的。