GetElementById с CefSharp

Я пытаюсь получить доступ к переменной веб-сайта по ее идентификатору в VB.net. Идентификатор — это «значение», данные, к которым я пытаюсь получить доступ, — это цена акций, а веб-сайт связан в коде. Я использовал встроенный веб-браузер со следующим кодом:

Imports System.Xml
Imports System.Net

Public Class Bolsa
  Public Sub New()
    InitializeComponent()
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    WebBrowser1.Navigate("https://www.ahorro.com/acnet/fichas/ficha_valor.acnet?isin=ES0113211835&marketCode=09&submarketId=09")
    While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
      Application.DoEvents()
    End While

    Dim request As String = WebBrowser1.Document.GetElementById("value").InnerText
    Dim s As String = request.Replace("<span>", Nothing)
    Dim t As String = s.Replace("</span>", Nothing)

    TextBox1.Text = t
    End Sub
End Class

Сейчас я использую плагин CefSharp, так как мне нужна поддержка HTML5, но я не могу получить доступ к данным, и я думаю, что метод правильный, я нашел его на официальном сайте. Фактический код:

Imports CefSharp.WinForms
Imports CefSharp
Imports System.Xml
Imports System.Net
Imports System.Treading
Imports System.Treading.Tasks

Public Class Bolsa
  Private WithEvents WebClave As ChromiumWebBrowser
  Dim cadena

  Public Sub New()
    InitializeComponent()
  End Sub
  Private Sub Form1_Load(sender As Object, e As EventArgs)
    InitializeComponent()
    Dim settings As New CefSettings()
    CefSharp.Cef.Initialize(settings)
    WebClave = New ChromiumWebBrowser("https://www.ahorro.com/acnet/fichas/ficha_valor.acnet?isin=ES0113211835&marketCode=09&submarketId=09")
    pANwEB.Controls.Add(WebClave)
  End Sub

  Private Sub WebClave_IsBrowserInitializedChanged(sender As Object, e As IsBrowserInitializedChangedEventArgs) Handles WebClave.IsBrowserInitializedChanged
    If e.IsBrowserInitialized Then
      cadena = WebClave.EvaluateScriptAsync("document.getElementById('value').innerHTML")
      TextBox1.Text = cadena
    End If
  End Sub
End Class

Любой совет? Заранее спасибо.

[EDIT]: добавлен полный исходный код


person KaZaC    schedule 04.02.2017    source источник
comment
Прочтите общее руководство по использованию, погуглите и найдете. Страница не будет загружена или браузер даже не будет инициализирован в вашем примере   -  person amaitland    schedule 04.02.2017
comment
Примеры не являются полным кодом. В обоих случаях веб-сайт полностью загружается и работает, и первый способ, используя встроенный веб-браузер, работает отлично, я получаю все данные, которые мне нужны, но некоторая графика не работает, как в HTML5. Используя CefSharp, я могу отлично загрузить веб-сайт, но когда я пытаюсь получить доступ к переменной с помощью кода в примере, я получаю пустой ответ или получаю сообщение об ошибке.   -  person KaZaC    schedule 04.02.2017
comment
Итак, у вас есть проблема с кодом, который отличается от того, который вы предоставляете в качестве образца кода, с которым у вас возникла проблема?   -  person amaitland    schedule 05.02.2017
comment
Добавлены оба полных кода   -  person KaZaC    schedule 07.02.2017
comment
Прочтите общее руководство по использованию, браузер инициализирован слишком рано, чтобы ожидать JavaScript. Вы также должны обратить внимание, поскольку вы не выполнили фактическую задачу.   -  person amaitland    schedule 07.02.2017


Ответы (1)


Импорт CefSharp Импорт CefSharp.WinForms

Публичный класс Form1 Public WithEvents browser Как ChromiumWebBrowser

Public Sub New()
    InitializeComponent()

    Dim settings As New CefSettings()
    CefSharp.Cef.Initialize(settings)

    browser = New ChromiumWebBrowser("https://google.com") With {
        .Dock = DockStyle.Fill
    }
    Panel1.Controls.Add(browser)

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim cvbar = browser.EvaluateScriptAsync("document.getElementById(""lst-ib"").value;")
    Dim response = cvbar.Result
    If response.Success = True And response.Result <> "" Then
        MsgBox(response.Result)
    End If
End Sub

Конец класса

person Noel Villareal Paguio    schedule 13.10.2018