首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# Cefsharp无法执行getElementsByClassName操作

C# Cefsharp无法执行getElementsByClassName操作
EN

Stack Overflow用户
提问于 2018-06-15 02:42:12
回答 1查看 3.5K关注 0票数 1

我正在尝试通过cefsharp中的类名从元素中读取文本。来自@Jim W的代码执行类似的任务,只是它使用ID而不是class

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e)
    {

        string EvaluateJavaScriptResult;
        var frame = chromeBrowser.GetMainFrame();
        var task = frame.EvaluateScriptAsync("(function() { return document.getElementById('searchInput').value; })();", null);

        task.ContinueWith(t =>
        {
            if (!t.IsFaulted)
            {
                var response = t.Result;
                EvaluateJavaScriptResult = response.Success ? (response.Result.ToString() ?? "null") : response.Message;
                MessageBox.Show(EvaluateJavaScriptResult);
            }
        }, TaskScheduler.FromCurrentSynchronizationContext());





    }

在将string EvaluateJavaScriptResult;更改为obj EvaluateJavaScriptResult;,将document.getElementById更改为document.getElementsByClassName并提供类名和索引后,我得到了error:"Uncaught SyntaxError: missing ) after argument list @:1:53"作为返回结果。我找不到丢失的)在哪里,我在很多地方尝试了很多不同的()的位置,我不认为这是真正的错误。我尝试过的所有操作仍然显示错误@:1:53 (位置?)我认为这意味着它在尝试查找类名之前出错了。有没有人知道我怎样才能成功地让cefsharp返回classname找到的东西的文本值?

编辑:在运行我在这里引用的代码的副本和粘贴选择时,我实际上得到了一个不同的问题,现在它只返回null。(这确实应该是相同的代码)

这是返回null的代码

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;

namespace WebAppWorkAround
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        InitializeChromium();
    }
    List<string> classList = new List<string>();
    public ChromiumWebBrowser chromeBrowser;

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {

    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
    private void InitializeChromium()
    {
        CefSettings settings = new CefSettings();
        Cef.Initialize(settings);
        chromeBrowser = new ChromiumWebBrowser("https://en.wikipedia.org/wiki/Main_Page");
        this.panel1.Controls.Add(chromeBrowser);
        chromeBrowser.Dock = DockStyle.Fill;

    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        Cef.Shutdown();
    }
    public string extract;

    private void button1_Click(object sender, EventArgs e)
    {

        object EvaluateJavaScriptResult;
        var frame = chromeBrowser.GetMainFrame();
        var task = frame.EvaluateScriptAsync("(function() { return document.getElementsByClassName('mw-headline')[0].value; })();", null);

        task.ContinueWith(t =>
        {
            if (!t.IsFaulted)
            {
                var response = t.Result;
                EvaluateJavaScriptResult = response.Success ? (response.Result ?? "null") : response.Message;
                MessageBox.Show(EvaluateJavaScriptResult.ToString());
            }
        }, TaskScheduler.FromCurrentSynchronizationContext());





    }


}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-19 04:41:00

.value属性的mw-headline是什么元素?考虑到正在发生的事情,可能不会。

假设mw-headline是一个像DIVSPAN这样的元素,您可以使用

代码语言:javascript
复制
var task = frame.EvaluateScriptAsync("(function() { return document.getElementsByClassName('mw-headline')[0].innerText; })();", null);

这是因为value用于文本框和输入字段,而像DIV这样的静态标记元素具有innerText和innerHTML。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50863951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档