首先,我正在编写一个python脚本,以自动从dreamhost.com购买某些域名。我首先访问网站的面板,用户可以在该面板上完成网站提供的任何功能。这是代码:
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,这里是:
<input name="fqdn" id="fqdn" class="text reg_domain_input" name="Pick Domain Name" value="mynewdomain" onChange="tradeMarkCheck(this.id)">
首先,它怀疑有2个名字元素。我不能使用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 abuse@dreamhost.com).");
}
}
</script>
我花了几个小时调试这个并试图找到一个解决方法。任何想法将不胜感激。提前谢谢!
答案 0 :(得分:1)
我没有看过该网站,但我强烈怀疑某些javascript正在做一些你没有做机械化的事情。这些情况下的标准答案是使用Selenium Webdriver自动化浏览器(它有一个Python API)。
编辑: Selenium Webdriver有一个HtmlUnit无头浏览器,支持javascript一点,但它远远不是完整的JavaScript支持。 PhantomJS或许可以帮助你,它是Webkit的无头版本。