网站的 Phantomjs 自动化导致我被 IP 阻止

Phantomjs Automation of a website leads me to getting IP blocked

我正在使用 PhantomJS 来自动化页面。我做的是:

    do{
    console.log(i);
    i++;

    page.open(url);
    do { phantom.page.sendEvent('mousemove'); } while (page.loading);

    if(page.injectJs('./Search.js') == false){
        console.log("Search.js Failed")
    }

    var links = page.evaluate(function(json){
        return search(json)
    },json)
    console.log(links);

} while(links == "")

所以这导致我重复打开网站,直到出现我要查找的内容。但这也导致我被 IP 禁止。我该怎么做才能解决这个问题?

您的 IP 可能正在被禁止,因为脚本在很短的时间内向网站生成了太多请求。因此,您需要限制请求,在它们之间应用暂停。

我会这样重写你的脚本:

var page = require('webpage').create();
var url = "http://www.website.tld/";
var json = {"some" : "json"};
var i = 0;
var links;

// We abstract main code to a function so that we can call it 
// again and again from itself
function getlinks (url, json) {

    i++;
    console.log(i);

    page.open(url);
    do { phantom.page.sendEvent('mousemove'); } while (page.loading);

    if(page.injectJs('./Search.js') == false){
        console.log("Search.js Failed")
    }

    var links = page.evaluate(function(json){
        return search(json);
    }, json);

    if(links == "")
    {
        // No links scraped yet, so we wait for 3 seconds and try again
        setTimeout(function(){
            getlinks(url, json);
        }, 3000)
    }
    else
    {
        console.log(links);
        phantom.exit();
    }
}

getlinks(url, json);