Javascript 如何在服务器上运行浏览器功能?

Javascript 如何在服务器上运行浏览器功能?,javascript,java,php,python,linux,Javascript,Java,Php,Python,Linux,我有一个网站,正在解析来自社交媒体的一些内容 或其他网站,以使信息保持最新。正如你所知,Instagram不会 使用“beatifulSoup Python Parser”或其他工具,因为您必须登录,并且必须能够运行js,否则它将无法加载。其他人也一样 因此,我确实在客户端运行了一些js脚本,使用googlechrome控制台,此脚本将数据保存在localStorage中,我在之后使用 问题是有时我的互联网速度很低,或者我必须用我的电脑运行这个脚本,这需要很多时间。也许不多,但每天都在做,这真的

我有一个网站,正在解析来自社交媒体的一些内容 或其他网站,以使信息保持最新。正如你所知,Instagram不会 使用“beatifulSoup Python Parser”或其他工具,因为您必须登录,并且必须能够运行js,否则它将无法加载。其他人也一样

因此,我确实在客户端运行了一些js脚本,使用googlechrome控制台,此脚本将数据保存在localStorage中,我在之后使用

问题是有时我的互联网速度很低,或者我必须用我的电脑运行这个脚本,这需要很多时间。也许不多,但每天都在做,这真的成了问题

我想在服务器端完成这项工作,互联网速度总是很高,我可以用手机启动脚本 或者在任何地方,我正试图找出如何实现

我需要一个服务器端的浏览器,它可以运行js,而且一切都与客户端一样

  • 启动浏览器
  • 等待页面加载
  • 运行一些js脚本
  • 大多数服务器没有图形界面,在终端上只返回html代码

    但是有很多主机服务、java服务器和越来越多的服务器,不仅仅是apach或nginx。据我所知,在java上,您可以创建自己的浏览器, 这意味着可以在服务器上运行浏览器功能

    问题是,是否有任何现成的工具我可以直接使用,或者可以编写这种功能,但使用库、框架可以尽可能快地编写,而不需要花费大量时间。因为我没有工作,要在服务器端创建浏览器,我只想运行一些js

    我使用php、js和python。客户机上仅支持Java和SE。JavaEE有很多库和很多功能。也许有人知道用哪种语言 我可以意识到这一点。任何框架,或者可能在linux上,或者有一个主机服务器可以作为客户机运行,我认为一些公司会让这种员工自动完成一些工作

    我一直在考虑幻影或nodej,但我对它们还不熟悉,我想我会花很多时间而没有结果

    任何建议、链接、意见、想法都会对我有很大帮助,谢谢

    Phantomjs确实可以工作,但您不能使用Phantomjs登录,可能是因为它不保存cookie或会话数据,或者可能没有标题,所以不使用webscraper程序,只需在服务器上使用真正的浏览器即可

    PhantomJS真的很不方便,不方便,或者其他什么,因为测试你得不到任何信息,它需要太长的时间,你不能只运行js脚本

    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)