Страницы

Поиск по вопросам

Показаны сообщения с ярлыком cefsharp. Показать все сообщения
Показаны сообщения с ярлыком cefsharp. Показать все сообщения

среда, 5 февраля 2020 г.

Не удается получить атрибут value

#javascript #c_sharp #html #cefsharp


Есть html страница и от туда нужно получить значение атрибута value из input.
Для этого я использую cefSharp .

(function() { var sb = document.getElementById('sidebar');
                var query=document.getElementById('query');
                return query.getAttribute("value");
                })();


Без всего лишнего код выглядит так. Так вот return возвращает пустую строку, даже
если я туда что либо впишу.
Получить атрибут class мне удалось

   


Value скрыт как я понял. Так как получить его при помощи webbrowser мне удавалось.
Вопрос как получить или задать атрибут value, или хотя бы подскажите как исправить.
    


Ответы

Ответ 1



Все работает правильно. Давайте взглянем на ваш HTML код: getAttribute() возвращает значение указанного атрибута элемента. Если элемент не содержит данный атрибут, могут быть возвращены null или "" (пустая строка); Так как input не содержит аттрибут value поэтому вы и получаете значение null или пустую строку. Также из документации: Примечание: Имеет смысл использовать hasAttribute, чтобы проверять наличие атрибутов перед вызовом getAttribute(), если может быть такое, что выбранный элемент не будет содержать искомого атрибута. Я бы рекомендовал вам использовать value вместо getAttribute, покажу на примере, почему (добавим value="" в input): function getValue() { var query = document.getElementById('query'); // пустая строка console.log(query.getAttribute("value")); // корректное значение console.log(query.value); } Разница в том, что query.value - это значение реального времени, и если пользователь изменит значение текстового поля, он будет содержать это и покажет новое значение. В то время как query.getAttribute('value') будет показывать исходное значение. Ссылка на оригинал: Difference between Element.value and Element.getAttribute(“value”)

Ответ 2



Ваш скрипт работает корректно, измените значение value для тега input в html, чтобы скрипт возвращал не null

среда, 11 декабря 2019 г.

Как изменить fingerprint браузера

#c_sharp #cefsharp #fingerprint


В программе используется CefSharp. Стоит задача менять fingerprint браузера.

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

Можно здесь посмотреть пример fingerprint и параметры, которые его образуют.

Но для меня остается открытым вопрос как эти данные можно подменять?

Например, как подменить разрешение экрана?
    


Ответы

Ответ 1



Насколько я понимаю, для того, чтобы поменять fingerprint браузера, достаточно просто изменить одну из его составляющих. Наиболее простой вариант - изменение UserAgent. Пожалуй, единственная сложность - это то, что вы работаете с CEF. В CefSharp есть такая штука, как CefSettings. А у нее, в свою очередь, есть поле CefSettings.UserAgent. Думаю, понятно, в какую сторону я клоню. Пример кода с англоязычного SO: public Form1() { InitializeComponent(); CefSettings cfsettings=new CefSettings(); cfsettings.UserAgent = "My/Custom/User-Agent-AndStuff"; Cef.Initialize(cfsettings); chromiumBrowser = new CefSharp.WinForms.ChromiumWebBrowser("http://whatsmyuseragent.com/") { Dock = DockStyle.Fill, }; this.Controls.Add(chromiumBrowser); }

воскресенье, 7 июля 2019 г.

C# CefSharp.OffScreen как его использовать, как получить html с уже выполненным JS

Здесь есть несколько статей по CefSharp, но как правило примеры кода скудные, и не раскрываю как использовать библиотеку . То что здесь нашёл выкидывает исключения, в общем прошу помочь - привести пример . Как без загрузки фрейма получить html текст с исполненным javascript. Скрипты должны выполнятся все, как в браузере , а не отдельно указанный в Task . Привожу пример с отображением в форме для CefSharp.WinForms , мне нужна аналогия кода для CefSharp.OffScreen 57 . DotNet 4.5.2
public partial class FormMain : Form { private ChromiumWebBrowser browser; private CefSettings settings;
public FormMain() { InitializeComponent(); InitializeWebBrowser(); } private void InitializeWebBrowser() { settings = new CefSettings();
settings.CefCommandLineArgs.Add("proxy-server", "37.75.9.131:8080"); settings.UserAgent = "Mozila 5.0";
Cef.Initialize(settings);
browser = new ChromiumWebBrowser(string.Empty) { Dock = DockStyle.Fill };
Controls.Add(browser); } private void btnLoad_Click(object sender, EventArgs e) { browser.Load("https://google.com"); } private async void btnSource_Click(object sender, EventArgs e) { var doc = browser.GetMainFrame(); string text = await doc.GetTextAsync(); } }
Таким образом я задал Proxy и UserAgent получил исходный код с обработанным JS спарсил текст страницы без разметки.
Html можно получить сл. образом : заменить string text = await doc.GetTextAsync(); на string html = await doc.GetSourceAsync();


Ответ

Пришёл к такому решению для CefSharp.OffScreen
private void btnGetText_Click(object sender, EventArgs e) { LoadFullText("https://google.com"); }
private async void LoadFullText(string url) { CefSettings settings = new CefSettings(); settings.CefCommandLineArgs.Add("proxy-server", "37.75.9.131:8080"); settings.UserAgent = "Mozila 5.0"; Cef.Initialize(settings); using (var chromium = new ChromiumWebBrowser(string.Empty)) { Thread.Sleep(1000); await LoadPageAsync(chromium, url); string text = await chromium.GetTextAsync(); } }
public static Task LoadPageAsync(IWebBrowser browser, string address = null) { var tcs = new TaskCompletionSource(); EventHandler handler = null; handler = (sender, args) => { if (!args.IsLoading) { browser.LoadingStateChanged -= handler; tcs.TrySetResultAsync(true); } }; browser.LoadingStateChanged += handler; if (!string.IsNullOrEmpty(address)) { browser.Load(address); } return tcs.Task; }
Для проверки работы просто вставил Thread.Sleep(1000); здесь нужно доработать.

понедельник, 8 апреля 2019 г.

Не удается получить атрибут value

Есть html страница и от туда нужно получить значение атрибута value из input. Для этого я использую cefSharp .
(function() { var sb = document.getElementById('sidebar'); var query=document.getElementById('query'); return query.getAttribute("value"); })();
Без всего лишнего код выглядит так. Так вот return возвращает пустую строку, даже если я туда что либо впишу. Получить атрибут class мне удалось

Value скрыт как я понял. Так как получить его при помощи webbrowser мне удавалось. Вопрос как получить или задать атрибут value, или хотя бы подскажите как исправить.


Ответ

Все работает правильно. Давайте взглянем на ваш HTML код:

getAttribute() возвращает значение указанного атрибута элемента. Если элемент не содержит данный атрибут, могут быть возвращены null или "" (пустая строка);
Так как input не содержит аттрибут value поэтому вы и получаете значение null или пустую строку. Также из документации:
Примечание: Имеет смысл использовать hasAttribute, чтобы проверять наличие атрибутов перед вызовом getAttribute(), если может быть такое, что выбранный элемент не будет содержать искомого атрибута.
Я бы рекомендовал вам использовать value вместо getAttribute, покажу на примере, почему (добавим value="" в input):
function getValue() { var query = document.getElementById('query'); // пустая строка console.log(query.getAttribute("value")); // корректное значение console.log(query.value); }
Разница в том, что query.value - это значение реального времени, и если пользователь изменит значение текстового поля, он будет содержать это и покажет новое значение. В то время как query.getAttribute('value') будет показывать исходное значение.
Ссылка на оригинал: Difference between Element.value and Element.getAttribute(“value”)