Member 14993280 Ответов: 2

Как я могу ввести текст из моего textbox1.text в текстовое поле внутри веб-браузера chromium, то есть (facebok)


Привет, я пытаюсь использовать этот веб-браузер chromium и ввести свой textbox.text в одно из текстовых полей внутри веб-сайта. У меня возникли проблемы с этим, как это всегда бывает
Object reference not set to an instance of an object.'

Я уверен, что получил "удостоверение" правильно. Например, идентификатор поля имени пользователя Facebook.

Что я уже пробовал:

Вот мой код на данный момент

Imports CefSharp.WinForms
Imports CefSharp
Imports CefSharp.Web
Imports CefSharp.JavascriptBinding
Imports CefSharp.Event

Public Class Form2

    Private WithEvents browser As ChromiumWebBrowser

    Sub New()
         InitializeComponent()
        InitializeChromium() 
    End Sub

    Private Sub InitializeChromium()
        Dim settings As New CefSettings()
        CefSharp.Cef.Initialize(settings)
        Dim browser As New ChromiumWebBrowser("https://www.facebook.com")
        Panel1.Controls.Add(browser)
        browser.Dock = DockStyle.Fill 
    End Sub
 

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
        browser.ExecuteScriptAsync("document.getElementById('email').value='ansdew@gmail.com'")


    End Sub 

Richard MacCutchan

Какая строка вызывает ошибку?

Member 14993280

Привет,
Эта линия

браузер.ExecuteScriptAsync("document.getElementById('email').value='ansdew@gmail.com'")

Я думаю, что получил неправильный код, так как он не находит if текстового поля на Facebook для электронной почты или этот код неверен при получении идентификатора и вводе в него значения.

PS извините за предварительный пост здесь. Я здесь новичок и ищу правильный код ха ха

Richard MacCutchan

Ну, сообщение предполагает, что getElementById вызов не нашел поля с именем "электронная почта".

Member 14993280

Да, я пытался найти правильный код getElementById, getElementByName, getElementByClass
ничего из этого не работает. если только код внутри этого ExecuteScriptAsync не является правильным.

Может быть, мне нужно ввести что-то другое, кроме "document.getElementById('email').value='ansdew@gmail.com-что ?

Richard MacCutchan

Вызов getElementById это правильно, но вам нужен какой-то способ проверить, что он действительно находит ссылку, прежде чем вы попытаетесь ее использовать. Не думайте, что системные или другие библиотечные вызовы всегда будут успешными.

2 Ответов

Рейтинг:
1

Richard Deeming

Цитата:
Private WithEvents browser As ChromiumWebBrowser
...
Private Sub InitializeChromium()
    ...
    Dim browser As New ChromiumWebBrowser("https://www.facebook.com")
    Panel1.Controls.Add(browser)
    browser.Dock = DockStyle.Fill 
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
    browser.ExecuteScriptAsync("document.getElementById('email').value='ansdew@gmail.com'")
End Sub 
В вашем InitializeChromium метод, вы создаете и инициализируете локальную переменную с именем browser, который скрывает browser поле.

Когда ваш Button1_Click пожары событий, то browser поле есть Nothing. Вы пытаетесь вызвать метод на Nothing, и ваш код терпит неудачу с NRE.

Измените метод инициализации, чтобы инициализировать поле вместо локальной переменной:
Private Sub InitializeChromium()
    Dim settings As New CefSettings()
    CefSharp.Cef.Initialize(settings)
    browser = New ChromiumWebBrowser("https://www.facebook.com")
    Panel1.Controls.Add(browser)
    browser.Dock = DockStyle.Fill 
End Sub


Рейтинг:
1

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос: может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!


Member 14993280

Привет OriginalGriff,

Спасибо за объяснение. Я ценю это.
Строка, на которую указывает "ссылка на объект не установлена на экземпляр объекта".

браузер.ExecuteScriptAsync("document.getElementById('email').value='ansdew@gmail.com'")

Кстати, это Visual Basic.

OriginalGriff

Итак, мы используем eteh debugger, чтобы выяснить, какая часть этого значения является нулевой (или ничего в VB), а затем вы можете начать работать над тем, почему. Но пока вы этого не сделаете, вы ничего не сможете сделать ...

Member 14993280

Я думаю, что в моих вещах нет ничего пустого. То, что я думаю, что мне нужно, - это правильный код/скрипт для вызова идентификатора ("электронной почты") сайта facebook, чтобы я мог ввести значение.

OriginalGriff

Ты же знаешь, что есть. Потому что если бы этого не было, вы бы не получили "ссылку на объект, не установленную на экземпляр объекта."

Member 14993280

Ну, если и есть, то я думаю, что это браузер.ExecuteScriptAsync(...) и код внутри него. Он не получает и не находит идентификатор текста Facebook, поэтому он сообщает, что ссылка на объект установлена на экземпляр объекта.

Это код внутри, который я ищу.

OriginalGriff

Итак, что вы сделали, чтобы узнать, как называется поле ввода? Посмотрел на HTML-код? - С чем это?