Como obter elementos pelo nome no Delphi Chromium Embedded?

Para obter um nó DOM específico incorporado no documento da Web atual de uma instância TChromium, usando seu ID, use ICefDomDocument.getElementById (). Mas como você encontra elementos pelo atributo NAME? O Javascript tem o método document.getElementsByName () e o TWebBrowser (que envolve o IE) tem uma chamada semelhante, mas não consigo descobrir como fazer isso com o TChromium. Eu preciso encontrar alguns elementos DOM que possuem atributos NAME, mas não atributos de ID. Eu procurei oceflib unidade e não viu nada que faria isso.

Questão lateral. Se alguém tiver um link para um site ou documento de estilo "receitas" do TChromium, eu posso usá-lo.

ATUALIZAÇÃO: Enquanto espera por uma resposta eu criei o seguinte código para fazer getElementsbyName (). Eu gostaria de algo mais rápido do que escanear toda a árvore DOM. Se você ver algo errado no código, me avise:

type
    TDynamicCefDomNodeArray = array of ICefDomNode;


// Given a Chromium document interface reference and a NAME attribute to search for,
//  return an array of all DOM nodes whose NAME attribute matches the desired.
function getElementsByName(ADocument: ICefDomDocument; theName: string): TDynamicCefDomNodeArray;

    // Get all the elements with a particular NAME attribute value and return
    //  an array of them.
    procedure getElementsByName1(intfParentNode: ICefDomNode; theName: string; var aryResults: TDynamicCefDomNodeArray);
    var
        oldLen: integer;
        intfChildNode: ICefDomNode;
        theNameAttr: string;
    begin
        Result := nil;
        intfChildNode := nil;

        if Assigned(intfParentNode) then
        begin
            // Attributes are case insensitive.
            theNameAttr := intfParentNode.GetElementAttribute('name');

            if AnsiSameText(theNameAttr, theName) then
            begin
                // Name attribute match.  Add it to the results array.
                oldLen := Length(aryResults);
                SetLength(aryResults, oldLen + 1);
                aryResults[oldLen] := intfParentNode;
            end; // if AnsiSameText(intfParentNode.Name, theName) then

            // Does the parent node have children?
            if intfParentNode.HasChildren then
            begin
                intfChildNode := intfParentNode.FirstChild;

                // Scan them.
                while Assigned(intfChildNode) do
                begin
                    getElementsByName1(intfChildNode, theName, aryResults);

                    if Assigned(intfChildNode) then
                        intfChildNode := intfChildNode.NextSibling;
                end;
            end; // if intfParentNode.HasChildren then
        end; // if Assigned(intfParentNode) then
    end;

    // ---------------------------------------------------------------

var
    intfCefDomNode: ICefDomNode;
begin
    intfCefDomNode := nil;
    Result := nil;

    if Assigned(ADocument) then
    begin
        // Check the header.
        intfCefDomNode := ADocument.Document;

        if Assigned(intfCefDomNode) then
        begin
            // Check the parent.
            getElementsByName1(intfCefDomNode, theName, Result);
        end; // if Assigned(intfCefDomNode) then
    end; // if Assigned(ADocoument) then
end;

// ---------------------------------------------------------------

questionAnswers(1)

yourAnswerToTheQuestion