2011-06-23 58 views
1

首先,我正在编写一个python脚本来自动从dreamhost.com购买某些域。我首先访问网站的面板,用户可以做网站所提供的任何东西。这里是代码:写入python机械化模块中的文本输入时出现的问题

br = mechanize.Browser() 
br.open("https://panel.dreamhost.com/index.cgi?tree=domain.registration&") 
br.select_form(name="a") 
br["username"]="my_username_here" 
br["password"]="my_password_here" 
br.submit() 

这段代码字完美并将我登录到面板中。从这里,有一个文本框来输入你的域名和一个多选的选择你的扩展 - 当这个表单被提交时,它会检查可用性。

我采取了类似的做法,以上面的成功,并执行以下操作:

br.select_form(name="f") 
br["Pick Domain Name"] = "domainiwanttobuy" #textbox 
br["tld"] = [extension list]     #select from dropdown 
br.submit() 

这种形式提交后生成的HTML显示的下拉适当改变,但文本字段为空,我也得到来自dreamhost的错误说:“错误:请在上面输入域名。”

所以输入字段不工作 - 我看着相应网页HTML源代码,在这里,它是:

它所有的犯罪嫌疑人,有2个元素
<input name="fqdn" id="fqdn" class="text reg_domain_input" name="Pick Domain Name" value="mynewdomain" onChange="tradeMarkCheck(this.id)"> 

第一。我不能使用name =“fqdn”,或者说这样的控件不存在。其次,我看到一个javascript函数在值发生变化时被调用。我意识到机械化不能处理Javascript,但我不相信该功能会做任何有价值的事情。所以,我不认为这是造成问题。下面是相应的JavaScript函数:

<script type="text/javascript"> 
function tradeMarkCheck(x) { 
    var domain = document.getElementById(x).value; 
    var bad = /(dream.*host|host.*dream)/; 

    if (bad.test(domain)) { 
     alert("NOTE: Domains containing 'DreamHost' in them are not eligible for use with DreamHost Rewards. Also, please ensure that your site/domain does not dilute or infringe upon the 'DreamHost' trademark (if you have any questions as to whether a use is legal or not, contact us at [email protected])."); 
    } 
} 
</script> 

我已经花了几个小时的调试这一点,并试图获得一个解决方法。任何想法将不胜感激。提前致谢!

回答

1

我还没有看过该网站,但我强烈怀疑有些JavaScript正在做一些你没有做的机械化工作。在这些情况下的标准答案是使用Selenium Webdriver来自动浏览器(它有一个Python API)。

编辑: 硒Webdriver有HtmlUnit无头浏览器,支持JavaScript一点,但它远没有完整的JavaScript支持。 PhantomJS可能会帮助你,它是Webkit的无头版本。

+0

唯一的问题是我不能让该过程对用户可见,并且据我所知,没有办法将硒浏览器从用户隐藏的权利? –

+0

我最终与Selenium一起去了 - Python的文档很糟糕,但是一旦你想出了语法,所有东西都能正确运行。谢谢你的帮助。 –