Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,904

HOME > .NET Framework > Forum > Windows Service มีปัญหากับ WebBrowser ครับ "Object reference not set to an instance of an object."



 

Windows Service มีปัญหากับ WebBrowser ครับ "Object reference not set to an instance of an object."

 



Topic : 134113



โพสกระทู้ ( 39 )
บทความ ( 0 )



สถานะออฟไลน์




พอดีโปรเจ็คที่ทำ คือ ให้ดึง อัตราแลกเปลี่ยน จากธนาคารแห่งประเทศไทย มาเก็บในฐานข้อมูลเพื่อจะนำอัตราซื้อ-ขาย ไปใช้งานต่อไปครับ
เบื้องต้น ลองดูพวก API แล้ว แต่ยัง งงๆ อยู่ (มีตัวอย่าง API จากเว็บ แต่เป็น C# Web App ลองหาวิธีให้เป็น Win App ได้ แต่ก็ดึงค่ามาไม่ได้ครับ)
ดันไปเห็นอีกวิธีคือใช้ WebBrowser โหลด อัตราแลกเปลี่ยน จากธนาคารแห่งประเทศไทย โค้ดโหลด
Code (VB.NET)
Web.ObjectForScripting = True
Web.ScriptErrorsSuppressed = True
Web.Navigate("https://www.bot.or.th/thai/_layouts/application/exchangerate/exchangerate.aspx")


เมื่อโหลดเสร็จ (DocumentCompleted) ก็ใช้โค้ดประมาณนี้ครับ

Code (VB.NET)
Dim str As String = ""
For Each h As HtmlElement In Web.Document.GetElementsByTagName(txtTagName.Text)
    If Not Object.ReferenceEquals(h.GetAttribute(txtGetAtt.Text), Nothing) AndAlso h.GetAttribute(txtGetAtt.Text).Equals(txtGetAttEquals.Text) Then
        If str.ToString.Split(",").Length = 4 AndAlso IsNumeric(h.InnerText) = False Then
            Exit For
        Else
            str &= If(str = "", "", ",") & h.InnerText.Trim
        End If
        If str.ToString.Split(",").Length = 5 Then
            strText.Text &= If(String.IsNullOrEmpty(strText.Text), "", vbNewLine) & str.ToString
            str = ""
        End If
    ElseIf Not Object.ReferenceEquals(h.GetAttribute(txtGetErrorAtt.Text), Nothing) AndAlso (h.GetAttribute(txtGetErrorAtt.Text).Equals(txtGetErrorAttEquals.Text) And Not String.IsNullOrEmpty(h.InnerText)) Then
        strText.Text = h.InnerText.Trim
        Exit For
    End If
Next


ที่เข้าใจจากโค้ดข้างต้นคือ ไล่วนลูปจาก TagName ของเว็บ แล้วดูว่าค่าไหนตรงกับข้อมูลที่แสดงในเว็บ แล้วดึงค่าจาก Tagname นั้นมาครับ ต่อไปก็นำค่าที่เก็บมา (strText) มาอ่านค่าแล้วบันทึกลงฐานข้อมูลครับ
(แต่ที่ผมทำคือ เปิด Chrome แล้วเข้าเว็บ แล้วคลิกขวาตรงที่ว่าง ๆ แล้วเลือก ดูรหัสต้นฉบับ แล้วหา Tagname ที่มีค่าตรงกับที่ผมต้องการครับ)

เข้าประเด็นนะครับ ตอนแรกรันทดสอบโค้ดที่ New Project Windows Application ปรกติ ไม่มีปัญหาครับ
แต่พอไป New Project เป็น Service เกิดปัญหาคือ เวลาให้ WebBrowser โหลด อัตราแลกเปลี่ยน จากธนาคารแห่งประเทศไทย เกิด Error บรรทัดนี้ครับ
Code (VB.NET)
Web.ObjectForScripting = True


Error ว่า
Quote:
"Object reference not set to an instance of an object."


ลองหาวิธีแก้ก็ยัง งง ๆ อยู่ ช่วยชี้แนะด้วยครับ เป็นวิธีแก้ไข หรืออะไรที่ดีกว่านี้ หรือเป็น API ได้ยิ่งดีครับ ขอบคุณครับ



Tag : .NET, Win (Windows App), VS 2010 (.NET 4.x), Windows









ประวัติการแก้ไข
2019-08-31 16:13:47
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-08-31 16:12:49 By : pattaphol View : 109 Reply : 2
 

 

No. 1



โพสกระทู้ ( 74,014 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

Windows Services ไม่น่จะดึง Web Browser ได้ครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-09-02 17:38:53 By : mr.win
 


 

No. 2



โพสกระทู้ ( 223 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

วิธีของคุณ ที่ทำ น่าจะเป็นการ web crawler มากกว่านะครับ

ลองดู วิธี ในอ้างอิงด้านนล่างนะครับ (อันแรก) คิดว่าน่าจะดูแล้ว แต่ลองค่อยๆอ่าน และทำความเข้าใจอีกครั้งนะครับ

เห็นใช้ภาษา VB.NET ผมแปะให้ครับ (แปลง จาก C# ที่อ้างอิงนั่นแหละครับ)

Code (VB.NET)
Private Sub SurroundingSub()
    Dim startPeriod As String = "2019-01-05"
    Dim endPeriod As String = "2019-01-05"
    Dim client = New RestClient("https://apigw1.bot.or.th/bot/public/Stat-ExchangeRate/v2/DAILY_AVG_EXG_RATE/?start_period=" & startPeriod & "&end_period=" & endPeriod)
    Dim request = New RestRequest(Method.[GET])
    request.AddHeader("Accept", "application/json")
    request.AddHeader("x-ibm-client-id", "REPLACE_THIS_KEY")
    Dim response As IRestResponse = client.Execute(request)

    If response.StatusCode.Equals(HttpStatusCode.OK) Then
        Console.WriteLine(response.Content)
    End If
End Sub



อ้างอิง

https://medium.com/@minatonamikazerak/python-%E0%B8%97%E0%B8%B3-web-scraping-web-crawler-d2d00244ac94

https://medium.com/readmoreth/consume-bank-of-thailand-api-using-c-net-c7595f5efd22
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-09-06 02:02:32 By : bigsuntat
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : Windows Service มีปัญหากับ WebBrowser ครับ "Object reference not set to an instance of an object."
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่