无法通过在 WebBrowser 站点中打开来获取更新的条形码图像
Can't get updated barcode image via opened in WebBrowser site
我的问题如下:
我尝试通过 WebBrowser 打开条码在线生成器并获取条码图像。
这是我的代码:
/// <summary>
/// Main form of barcode server
/// </summary>
public partial class MainForm : Form
{
#region Constants
private const String BarCodeSite = "http://www.abarcode.net/online.aspx?barcode=EAN13";//"http://barcode.tec-it.com/en#";
#endregion
/// <summary>
/// Main form constructor
/// </summary>
public MainForm()
{
InitializeComponent();
}
/// <summary>
/// This event occured after form load
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_Load(object sender, EventArgs e)
{
webBrowser.Navigate(new Uri(BarCodeSite));
}
/// <summary>
/// Occurs when form is closing.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
barcodeServer.Abort();
}
catch (Exception ex)
{
// do nothing
}
}
private void button1_Click(object sender, EventArgs e)
{
var code = textBox1.Text;
var editText = webBrowser.Document.GetElementById("ValueToEncode");
editText.SetAttribute("Value", code.Trim(new char[] { '[=10=]' }));
webBrowser.Document.GetElementById("Label13").InvokeMember("click");
}
}
我执行的操作:
1. 运行 我的项目
2. 在选项中选择图像缩放 250%
3. 粘贴到 textBox1 controle code 8414034620202
4.点击button1
预期结果:在文本字段中输入条码并根据输入的条码更新图像
实际结果:条码输入到文本字段,但图像未更新。我不明白为什么我的图像没有更新。我做错了什么吗?
备注:
Id "ValueToEncode" 属于文本字段
ID "Label13" 属于带有文本 "Data to encode:" 的文本标签
我用过的网站:
http://www.abarcode.net/online.aspx?barcode=EAN13
假设允许抓取该网站的内容,如果您不必依赖使用 WebBrowser 控件,因为它有很多怪癖,那么您的情况会更好。
在您的特定情况下,只需两个简单的 HttpWebRequest
调用即可获取生成的条形码图像:
CookieContainer cookies = new CookieContainer();
private void button1_Click(object sender, EventArgs e)
{
// do a get to have the session cookie
var wr = (HttpWebRequest) WebRequest.Create("http://www.abarcode.net/online.aspx");
wr.CookieContainer = cookies;
wr.Method = "GET";
var stream = wr.GetResponse().GetResponseStream();
using(var sr = new StreamReader(stream))
{
// debug
Debug.WriteLine(sr.ReadToEnd());
}
// get the image
var imageReq = (HttpWebRequest)WebRequest.Create(
String.Format(
"http://www.abarcode.net/barcode.aspx?value={0}&type=EAN13",
textBox1.Text));
// this makes if you get their watermark in the barcode or not
imageReq.Referer = "http://www.abarcode.net/online.aspx?barcode=EAN13";
imageReq.CookieContainer = cookies;
imageReq.Method = "GET";
// get the image stream
using(stream = imageReq.GetResponse().GetResponseStream())
{
// create the bitmap.
pictureBox1.Image = Bitmap.FromStream(stream);
}
}
我有一个 CookieContainer
来捕获和 re-use WebRequest 调用中的 cookie。我需要添加的唯一特别的东西是引用 header 以防止水印出现。
您的结果将如下所示:
我的问题如下: 我尝试通过 WebBrowser 打开条码在线生成器并获取条码图像。 这是我的代码:
/// <summary>
/// Main form of barcode server
/// </summary>
public partial class MainForm : Form
{
#region Constants
private const String BarCodeSite = "http://www.abarcode.net/online.aspx?barcode=EAN13";//"http://barcode.tec-it.com/en#";
#endregion
/// <summary>
/// Main form constructor
/// </summary>
public MainForm()
{
InitializeComponent();
}
/// <summary>
/// This event occured after form load
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_Load(object sender, EventArgs e)
{
webBrowser.Navigate(new Uri(BarCodeSite));
}
/// <summary>
/// Occurs when form is closing.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
barcodeServer.Abort();
}
catch (Exception ex)
{
// do nothing
}
}
private void button1_Click(object sender, EventArgs e)
{
var code = textBox1.Text;
var editText = webBrowser.Document.GetElementById("ValueToEncode");
editText.SetAttribute("Value", code.Trim(new char[] { '[=10=]' }));
webBrowser.Document.GetElementById("Label13").InvokeMember("click");
}
}
我执行的操作: 1. 运行 我的项目 2. 在选项中选择图像缩放 250% 3. 粘贴到 textBox1 controle code 8414034620202 4.点击button1
预期结果:在文本字段中输入条码并根据输入的条码更新图像 实际结果:条码输入到文本字段,但图像未更新。我不明白为什么我的图像没有更新。我做错了什么吗?
备注: Id "ValueToEncode" 属于文本字段 ID "Label13" 属于带有文本 "Data to encode:" 的文本标签 我用过的网站: http://www.abarcode.net/online.aspx?barcode=EAN13
假设允许抓取该网站的内容,如果您不必依赖使用 WebBrowser 控件,因为它有很多怪癖,那么您的情况会更好。
在您的特定情况下,只需两个简单的 HttpWebRequest
调用即可获取生成的条形码图像:
CookieContainer cookies = new CookieContainer();
private void button1_Click(object sender, EventArgs e)
{
// do a get to have the session cookie
var wr = (HttpWebRequest) WebRequest.Create("http://www.abarcode.net/online.aspx");
wr.CookieContainer = cookies;
wr.Method = "GET";
var stream = wr.GetResponse().GetResponseStream();
using(var sr = new StreamReader(stream))
{
// debug
Debug.WriteLine(sr.ReadToEnd());
}
// get the image
var imageReq = (HttpWebRequest)WebRequest.Create(
String.Format(
"http://www.abarcode.net/barcode.aspx?value={0}&type=EAN13",
textBox1.Text));
// this makes if you get their watermark in the barcode or not
imageReq.Referer = "http://www.abarcode.net/online.aspx?barcode=EAN13";
imageReq.CookieContainer = cookies;
imageReq.Method = "GET";
// get the image stream
using(stream = imageReq.GetResponse().GetResponseStream())
{
// create the bitmap.
pictureBox1.Image = Bitmap.FromStream(stream);
}
}
我有一个 CookieContainer
来捕获和 re-use WebRequest 调用中的 cookie。我需要添加的唯一特别的东西是引用 header 以防止水印出现。
您的结果将如下所示: