selenium怎样获取动态图片验证码..急
本帖最后由 愚人 于 2012-4-20 15:20 编辑selenium怎样获取动态图片验证码?
在点开页面后,点用户名和密码后需要图片验证码?
我自动转换为C#后不知道要怎么写来验证验证码了
源码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Selenium;
using System.Threading;
namespace TestFor2012420
{
public partial class Form1 : Form
{
private ISelenium selenium;
private StringBuilder verificationErrors;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://mydiy.pconline.com.cn/");
selenium.Start();
verificationErrors = new StringBuilder();
selenium.Open("/");
selenium.Click("xpath=(//a)");
selenium.Click("//span[@type='1']");
selenium.Type("xpath=(//input[@name='product_query'])", "华硕");
selenium.Click("xpath=(//input[@name='search'])");
Thread.Sleep(3000);
selenium.Click("link=下一页");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='2']");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Type("id=num_2", "2");
Thread.Sleep(3000);
selenium.Click("//span[@type='3']");
Thread.Sleep(3000);
selenium.Click("link=2");
Thread.Sleep(3000);
selenium.Click("link=3");
Thread.Sleep(3000);
selenium.Click("link=选用");
Thread.Sleep(3000);
selenium.Click("//span[@type='4']");
Thread.Sleep(3000);
selenium.Click("link=下一页");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='5']");
Thread.Sleep(3000);
selenium.Click("link=2");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='6']");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='7']");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='8']");
Thread.Sleep(3000);
selenium.Click("link=下一页");
Thread.Sleep(5000);
selenium.Click("link=下一页");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='9']");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='10']");
Thread.Sleep(3000);
selenium.Click("link=下一页");
Thread.Sleep(3000);
selenium.Click("link=下一页");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='11']");
Thread.Sleep(3000);
selenium.Click("link=下一页");
Thread.Sleep(3000);
selenium.Click("link=下一页");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Click("//span[@type='12']");
Thread.Sleep(3000);
selenium.Click("//span[@type='15']");
Thread.Sleep(3000);
selenium.Click("xpath=(//a)");
Thread.Sleep(3000);
selenium.Select("name=DiyType", "label=专业设计方案");
Thread.Sleep(3000);
selenium.Type("id=DiyTitle", "测试");
Thread.Sleep(3000);
selenium.Type("id=DiyComment", "此程序用于测试");
}
}
}
该怎么解决呢?说详细一点。。谢谢大家了 求助贴子请不要设置成付费主题,谢谢 验证码问题。。。
最简单的办法就是和开发商量,取消验证码,或做个万能验证码。。
至于别的方法。。同等大神支招。。
另外。。几乎每执行一句代码,等3秒。。。这效率是不是该考虑下了。。 用了太多的clickandwait了……
一般是要求开发做个api接口,你可以直接调用,获取当前的验证码。要不然就让开发直接把验证码注释掉。这些事情应该在需求分析阶段就作为可测性需求向开发提出来,现在才注意这个问题,被动了不是。 回复 2# 愚人
估计又一个认为是给别人钱的 哈哈 回复 3# ryugun
每一句加上等待是必须得。你要考虑网页加载时间,如果网页加载没有完毕的话。会出问题的。不信你可以试试 回复 4# 六月天
:'( 确实很被动 没有万能的验证码, 知道开发的code也不错, 回调了. 如果是第三方的, 那估计没什么辄了 回复 6# 喜欢猫的白菜
等待页面加载是必须的。。但目前你这种写法很不好。。
我记得selenium里封装有对应的api,名称忘记了,也可以自己简单写一个函数
点击某个按钮,检查需要出现的东西是否出现,如果没出现再等待1(n)秒。。然后循环再检查,再等待。。。直到超出我们预置的时间范围。。。
这样的方式会好的多。。 :L楼主好牛X 求助帖还要收费?桑不起啊 Thank you very much for sharing!The good man!The good life of peace! 不可能啊,要停用吧
页:
[1]