以下是我的代码中的代码段:
this.sendKeys('.usertext.cloneable > div > div.md > textarea', "Message");
//...
this.evaluate(function(){
var entry = document.getElementsByClassName("usertext cloneable")[0].id;
document.getElementById(entry).removeAttribute("action")
document.querySelector('#'+entry).submit()
})
此代码应在用sendKeys
填写之后提交在网站(Reddit.com)上找到的表单。它完成填写文本框(我可以通过casper.capture
看到屏幕截图),但不提交文本。我原本认为这是因为CSS选择器出错,但我不再确定。由于action='#'
属性,Casper似乎没有发送表单,所以在提交表单之前它已被删除。我不知道下一步该尝试什么。
形式:
<form action="#" class="usertext cloneable" onsubmit="return post_form(this, 'comment')" id="form-t3_3gp8yji5i">
<input type="hidden" name="thing_id" value="t3_3gp8yj">
<div class="usertext-edit md-container" style="">
<div class="md">
<textarea rows="1" cols="1" name="text" class=""></textarea>
</div>
<div class="bottom-area">
<span class="help-toggle toggle" style="">
<a class="option active " href="#" tabindex="100" onclick="return toggle(this, helpon, helpoff)">formatting help</a>
<a class="option " href="#">hide help</a>
</span>
<a href="/wiki/reddiquette" class="reddiquette" target="_blank" tabindex="100">reddiquette</a>
<span class="error TOO_LONG field-text" style="display:none"></span>
<span class="error RATELIMIT field-ratelimit" style="display:none"></span>
<span class="error NO_TEXT field-text" style="display:none"></span>
<span class="error TOO_OLD field-parent" style="display:none"></span>
<span class="error DELETED_COMMENT field-parent" style="display:none"></span>
<span class="error DELETED_LINK field-parent" style="display:none"></span>
<span class="error USER_BLOCKED field-parent" style="display:none"></span>
<div class="usertext-buttons">
<button type="submit" onclick="" class="save">save</button>
<button type="button" onclick="cancel_usertext(this)" class="cancel" style="display:none">cancel</button>
<span class="status"></span>
</div>
</div>
<div class="markhelp" style="display:none">
<p></p>
<p>reddit uses a slightly-customized version of <a href="http://daringfireball.net/projects/markdown/syntax">Markdown</a> for formatting. See below for some basics, or check <a href="/wiki/commenting">the commenting wiki page</a> for more detailed help and solutions to common issues.
</p>
以下是报告的错误:
Console: Unsafe JavaScript attempt to access frame with URL https://www.reddit.com/ from frame with URL https://static.adzerk.net/reddit/ads.html?sr=-reddit.com,loggedin&bust2#https://www.reddit.com. Domains, protocols and ports must match. Console: Unsafe JavaScript attempt to access frame with URL https://www.reddit.com/ from frame with URL https://static.adzerk.net/reddit/ads.html?sr=-reddit.com,loggedin&bust2#https://www.reddit.com. Domains, protocols and ports must match. Console: Unsafe JavaScript attempt to access frame with URL https://www.reddit.com/r/Pokemon_adventures/comments/3gp8yj/test_post_please_ignore/?thing_id=t3_3gp8yj&text=%22jnjrkefejkn%22 from frame with URL https://static.adzerk.net/reddit/ads.html?sr=pokemon_adventures,loggedin&bust2#https://www.reddit.com. Domains, protocols and ports must match. Console: Unsafe JavaScript attempt to access frame with URL https://www.reddit.com/r/Pokemon_adventures/comments/3gp8yj/test_post_please_ignore/?thing_id=t3_3gp8yj&text=%22jnjrkefejkn%22 from frame with URL https://static.adzerk.net/reddit/ads.html?sr=pokemon_adventures,loggedin&bust2#https://www.reddit.com. Domains, protocols and ports must match. Console: Unsafe JavaScript attempt to access frame with URL https://www.reddit.com/r/Pokemon_adventures/comments/3gp8yj/test_post_please_ignore/?thing_id=t3_3gp8yj&text=Message from frame with URL https://static.adzerk.net/reddit/ads.html?sr=pokemon_adventures,loggedin&bust2#https://www.reddit.com. Domains, protocols and ports must match. Console: Unsafe JavaScript attempt to access frame with URL https://www.reddit.com/r/Pokemon_adventures/comments/3gp8yj/test_post_please_ignore/?thing_id=t3_3gp8yj&text=Message from frame with URL https://static.adzerk.net/reddit/ads.html?sr=pokemon_adventures,loggedin&bust2#https://www.reddit.com. Domains, protocols and ports must match.
答案 0 :(得分:2)
由于您所获得的错误与表单提交无关,您可以尝试以下方法:
使用CasperJS工具提交表单。使用
this.fill(".usertext.cloneable", {}, true);
而不是this.evaluate(...);
。
使用CasperJS工具点击按钮:
this.click(".usertext.cloneable button[type='submit']");
如果这没有用,那么你可以尝试使用--web-security=false --ssl-protocol=any --ignore-ssl-errors=true
命令行选项运行CasperJS同样的事情。
答案 1 :(得分:1)
表单中的action="#"
看起来很可疑,所以我会在再次尝试之前删除它。
如果您无法更改HTML,则可以在提交表单之前使用casper.js将其删除。