Я тестировал код ниже
html:
Узел:
- Визуализация HTML [115 ]
- Для теста отправки формы создан POST API ( http: // localhost: 3000 / test )
var express = require('express');
const bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json())
app.use('/', express.static(__dirname + '/public'));
app.post('/test', (req, res) => {
console.log('test POST', req.body, req.params);
res.status(200).json({ status: true })
});
app.listen(3000, function () { console.log('listening') });
Python:
from robobrowser import RoboBrowser
import re
url = 'http://localhost:3000/test.html'
rb = RoboBrowser()
rb.open(url)
ff = rb.get_form(class_=re.compile('form'))
# yInputControl = rb.find(class_=re.compile(r'\y-input__control\b'))
yInputControl = rb.find(class_='y-input__control')
print(yInputControl)
yInputControl.value = 'myphonenumber'
rb.submit_form(ff)
CompileAssemblyFromDom компилирует в .cs файл, который затем выполняется через нормальный компилятор C#.
Пример:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.CSharp;
using System.CodeDom;
using System.IO;
using System.CodeDom.Compiler;
using System.Reflection;
namespace CodeDomQuestion
{
class Program
{
private static void Main(string[] args)
{
Program p = new Program();
p.dotest("C:\\fs.exe");
}
public void dotest(string outputname)
{
CSharpCodeProvider cscProvider = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.MainClass = null;
cp.GenerateExecutable = true;
cp.OutputAssembly = outputname;
CodeNamespace ns = new CodeNamespace("StackOverflowd");
CodeTypeDeclaration type = new CodeTypeDeclaration();
type.IsClass = true;
type.Name = "MainClass";
type.TypeAttributes = TypeAttributes.Public;
ns.Types.Add(type);
CodeMemberMethod cmm = new CodeMemberMethod();
cmm.Attributes = MemberAttributes.Static;
cmm.Name = "Main";
cmm.Statements.Add(new CodeSnippetExpression("System.Console.WriteLine('f'zxcvv)"));
type.Members.Add(cmm);
CodeCompileUnit ccu = new CodeCompileUnit();
ccu.Namespaces.Add(ns);
CompilerResults results = cscProvider.CompileAssemblyFromDom(cp, ccu);
foreach (CompilerError err in results.Errors)
Console.WriteLine(err.ErrorText + " - " + err.FileName + ":" + err.Line);
Console.WriteLine();
}
}
}
, который показывает ошибки в (теперь не существующий) временный файл:
) ожидаемый - c:\Documents and Settings\jacob\Local Settings\Temp\x59n9yb-.0.cs:17
; ожидаемый - c:\Documents and Settings\jacob\Local Settings\Temp\x59n9yb-.0.cs:17
термин Недопустимого выражения')' - c:\Documents and Settings\jacob\Local Settings\Tem p\x59n9yb-.0.cs:17
, Таким образом, я предполагаю, что ответ является "нет"
Я попытался найти, что окончательный компилятор звонит ранее, и я сдался. Существует множество слоев интерфейсов и виртуальных классов для моего терпения.
я не думаю, что исходная часть читателя компилятора заканчивается с деревом DOM, но интуитивно я согласился бы с Вами. Работа, необходимая для преобразования DOM к IL, должна намного меньше, чем читать исходный код C#.