casperjs中的fetchText未返回嵌入链接

时间:2015-12-13 02:51:28

标签: javascript ajax web-scraping phantomjs casperjs

Casperjs是测试各种网站上某些功能的好方法。

我正在使用的示例网站是教程的一部分。

以下网站提供了一个我无法使用console.log的嵌入代码 fetchText,使用casperjs。嵌入代码可以插入您的个人博客中,以链接到特定内容;在这种情况下,音乐专辑:

https://linkmaker.itunes.apple.com/en-us/details/1053933969

要刮的元素如下:

<a href="https://geo.itunes.apple.com/us/album/a-head-full-of-dreams/id1053933969?mt=1&amp;app=music" target="_blank">https://geo.itunes.apple.com/us/album/a-head-full-of-dreams/id1053933969?mt=1&amp;app=music</a>

以下是检查员的快照 snapshot 1

标记的较大部分的两个快照

snapshot 2

snapshot 3

请参阅我在下面使用的代码:

var theTextIWant=casper.fetchText(x('//*[@id="695806055"]/div[4]/div[2]'));
 console.log(theTextIWant);

不会返回任何错误,并且脚本可以与页面上的其他链接或文本完美配合。例如以下内容:

var theTextIWant=casper.fetchText(x('//*[@id="1053933969"]/div[4]/div[2]/a'));
 console.log(theTextIWant);

在查看相关的casperjs文档后,我无法找到 替代了嵌入代码上的fetchText。我错过了什么 casperjs文档,这将允许我console.log嵌入代码?

像往常一样,非常感谢您的帮助!

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

您似乎想要检索textarea的casper.fetchText()仅连接所选上下文元素的所有后代元素的TextNodes,但<textarea>没有子<input>value没有相同的方式。您必须访问仅在page context中访问的textarea的casper.then(function(){ this.echo(this.evaluate(function(){ return document.getElementById("link-code").value; })); }); 属性:

- onblur , you are making a call to "show users(this.value)" 
- there is a space between "show" and "user" , even u correct the space , you dont have a function "showuser" anywhere.
- your function to make the ajax call is "showHint"
- next you need a space between "new" and "XMLHTTpRequest()"

<form action="">
 First name: <input type="text" id="txt1" onblur="showHint(this.value)"/>
 </form>
<p>Username: <span id="txtHint"></span></p>
</form>



<script>
function showHint(str) {
var xhttp;
if (str.length == 0) {
document.getElementById("txtHint").innerHTML = "";
return;
}
 xhttp = new XMLHttpRequest();
 xhttp.onreadystatechange = function() {
  if (xhttp.readyState == 4 && xhttp.status == 200) {
  document.getElementById("txtHint").innerHTML = xhttp.responseText;
 }
 };
 xhttp.open("GET", "user.php?u="+str, true);
 xhttp.send();
}
</script>