[英]C# function execute javascript function in web page using webclient
我需要一些代码方面的帮助。 我有以下代码,它非常有效地允许我以编程方式登录到供应商的网站,然后从中为我们的数据库抓取图像。 这很好用。 问题是我还需要获取最新数据 - 这是页面上的导出按钮(导出到 excel)。 使用 F12 和提琴手我可以看到它调用了 java 脚本 function。 我的知识在网上有点有限 - 我读到客户端可能不是 go 调用 javascript 但 webbrowser 的方式? (我是一名集成专家,所以 SQL、SSIS、逻辑应用程序或 c# 中的基本编码更适合我)。 If I need to change to web browser how do I persist cookies from login etc. I'm coding this in azure function http trigger that will be used in logic apps flow.
public class WebClientEx : WebClient
{
public CookieContainer CookieContainer { get; private set; }
public WebClientEx()
{
CookieContainer = new CookieContainer();
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = CookieContainer;
}
return request;
}
}
static string GetSourceForMyShowsPage(string JobId)
{
var sqlinsert = new SQLInsert();
using (var client = new WebClientEx())
{
var values = new NameValueCollection
{
{ "UserName", "sss" },
{ "Password", "sss" },
};
// Authenticate
client.UploadValues("url/Login", values);
//get the image url that we need to get the image in bytes - we might need to change this to a byte method?
string responseMessage = client.DownloadString("myurl" + JobId);
string imageurl = "";
byte[] imageBytes;
//search for images in string
HtmlDocument document = new HtmlDocument();
document.LoadHtml(responseMessage);
document.DocumentNode.Descendants("img")
.Where(e =>
{
string src = e.GetAttributeValue("src", null) ?? "";
return !string.IsNullOrEmpty(src) && src.StartsWith(@"/Photo");
})
.ToList()
.ForEach(x =>
{
imageurl = x.GetAttributeValue("src", null);
imageurl = imageurl.Substring(0, imageurl.IndexOf("width") - 1);
imageurl = imageurl.Replace("amp;", "");
imageurl = imageurl.Replace("&", "");
imageurl = "url/" + imageurl;
imageBytes = client.DownloadData(imageurl);
string base64image = Convert.ToBase64String(imageBytes);
//upload data to sql table
sqlinsert.executeInsert(JobId, base64image);
});
// Download desired page
return client.DownloadString("url" + JobId);
}
}
javascript function 被称为:
function onExportClicked() {
var data = ST.Util.serialiseForm($('#shared-tag-search-form'));
var url = '/Reports/SharedTag';
var form = $('<form method="POST" action="' + url + '">');
data.push({ name: 'type', value: 'ExportToXls' });
$.each(data, function (k, v) {
form.append($('<input type="hidden" name="' + v.name + '" value="' + v.value + '">'));
});
$('body').append(form);
form.submit();
}
感谢分散。 我正在使用客户端的上传值并调用 api,然后使用写入所有字节获取数据。
client.BaseAddress = "url/";
var url = "Reports/SharedTag";
client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36");
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
var formdata = new NameValueCollection
{
{ "Search.Reported.StartDate", "27/07/2022" },
{ "type", "ExportToXls" },
};
byte[] result = client.UploadValues(url, "POST", formdata);
File.WriteAllBytes(@"C:\Temp\Excel.xls", result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.