Javascript 如何在服务器上运行浏览器功能?
我有一个网站,正在解析来自社交媒体的一些内容 或其他网站,以使信息保持最新。正如你所知,Instagram不会 使用“beatifulSoup Python Parser”或其他工具,因为您必须登录,并且必须能够运行js,否则它将无法加载。其他人也一样 因此,我确实在客户端运行了一些js脚本,使用googlechrome控制台,此脚本将数据保存在localStorage中,我在之后使用 问题是有时我的互联网速度很低,或者我必须用我的电脑运行这个脚本,这需要很多时间。也许不多,但每天都在做,这真的成了问题 我想在服务器端完成这项工作,互联网速度总是很高,我可以用手机启动脚本 或者在任何地方,我正试图找出如何实现 我需要一个服务器端的浏览器,它可以运行js,而且一切都与客户端一样Javascript 如何在服务器上运行浏览器功能?,javascript,java,php,python,linux,Javascript,Java,Php,Python,Linux,我有一个网站,正在解析来自社交媒体的一些内容 或其他网站,以使信息保持最新。正如你所知,Instagram不会 使用“beatifulSoup Python Parser”或其他工具,因为您必须登录,并且必须能够运行js,否则它将无法加载。其他人也一样 因此,我确实在客户端运行了一些js脚本,使用googlechrome控制台,此脚本将数据保存在localStorage中,我在之后使用 问题是有时我的互联网速度很低,或者我必须用我的电脑运行这个脚本,这需要很多时间。也许不多,但每天都在做,这真的
page.evaluate(function() {
setTimeout(function(){ document.getElementById("login").click(); console.log("click initialized"); }, 1000);
});
SetTimeout在evaluate中似乎不起作用,即使检查它也需要很多时间
page.evaluateJavascript(function() {
});
evaluateJavascript被卡住(它不会运行phantom.exit(0)),您必须重新启动cmd并转到cd,然后再次键入所有命令
非常简单的人工操作会产生巨大的问题。我不知道为什么要创建phantomjs,它只是为了捕捉或者做一个非常简单的工作。甚至来自phantomjs的解析器也非常满。没有教程,没有任何用处。没有图形界面,里面的脚本看起来像是用不正确的方式运行js,很难识别和了解它是如何在里面工作的。当它返回一个空行或一行也没有时,您没有任何访问权,任何信息。没有错误,什么都可以。它流行吗,我不知道,我以前听说过幻影,看起来没什么,丑陋,没用
我在考虑webDriver,例如selenium,不需要在客户机上运行selenium,在服务器上运行似乎有点贵。没有主机可以为您提供带有gui的vds,而不是ubuntu服务器,因为您需要浏览器
我意识到没有解决办法
我有一个在js上工作的脚本,它有多个功能,不仅仅是解析,有点像机器人,它分析用户数据,跟踪,取消跟踪,发布数据,并运行用户。问题是“如何在服务器上运行浏览器功能”,我只是想通过一次启动服务器上100个帐户的程序来模拟浏览器,但我想这是不可能的。也许我会用“没有解决方案,您不能在服务器上运行浏览器”的解决方案来结束这个问题。WebDriver的使用成本太高。没有任何程序,对于WebDriver,您可以立即使用,例如:Chrome、Firefox、Opera、Yandex等等,但它们也使用了大量RAM,这在VDS服务器上太贵了。我认为您可以使用,我用它来完成许多需要登录或js加载操作的爬行器 您可以使用Phantomjs登录,它可以设置cookie、会话数据和请求头。您只需搜索方法,如下所示:
当您使用phantomjs时,最重要的是每次您想要执行下一步时,必须确保页面或相关元素已加载完毕。由于页面或js加载需要速度时间,有时您还需要发送额外的参数来获取页面加载,否则没有相关元素,您无法开始下一步。您不必登录到scrapeInstagram。在使用JS时,我使用了requests_html包来为您完成这项工作。你可以从instagram_scraper()开始,它的灵感来自于请求和请求html的作者Kenneth Reitz的twitter-scraper()。其主要思想是在没有代币或登录的情况下进行刮取 这两个脚本都启发我创建了一个不需要登录的刮板。至少,这是一个好的开始 更新2018-09-22:我跟随,但在我自己的服务器上。诀窍是创建一个假显示:从Jo处看到这一点
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=options)
driver.get('http://nytimes.com')
print(driver.title)