繁体   English   中英

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

[英]How to run browser functionality on server?

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

出于这个原因,我确实在客户端运行了一些 js 脚本,使用 google chrome 控制台,这个脚本将数据保存在我之后使用的localStorage中。

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

我想在服务器端完成这项工作,总是有很高的互联网速度,我可以随时随地用我的手机启动脚本,我正在努力弄清楚如何实现。

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

  1. 启动浏览器
  2. 等待页面加载
  3. 运行一些js脚本

大多数服务器没有图形界面,在终端上只返回html 代码

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

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

我使用 php、js、python。 Java 只有 SE 和客户端。 JavaEE 有很多库和大量功能。 也许有人知道我可以用哪种语言来实现这一点。 任何框架,或者在 linux 上都是可能的,或者有一个可以作为客户端运行的主机服务器,我认为有些公司会做这种员工来自动完成一些工作。

我在考虑 phantomjs 或 nodejs,但我对他们来说是新手,我想我会花很多时间没有结果。

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

在此处输入图片说明

Phantomjs做工作,但您无法登录与Phantomjs,也许是因为它不保留cookie或会话数据,或者也许是没有头,所以不是使用网络刮板程序只使用在服务器上真正的浏览器

PhantomJS真的很烦,不方便什么的,测试你拿不到任何信息,时间太长,你不能只运行js脚本。

page.evaluate(function() {

     setTimeout(function(){ document.getElementById("login").click(); console.log("click initialized"); }, 1000);
});

评估中的 SetTimeout 似乎不起作用,即使检查它也需要很多时间

page.evaluateJavascript(function() {

});

evaluateJavascript 卡住了(它不会运行 phantom.exit(0)),您必须重新启动 cmd 并转到 cd 并再次键入所有命令。

非常简单的操作会变成巨大的问题。 我不知道为什么创建phantomjs,它只是为了捕捉或做一个非常简单的员工。 甚至来自 phantomjs 的解析器也很糟糕。 没有教程,没有用。 没有图形界面,evaluate里面的脚本好像运行js的方式不对,真的很难识别和学习它是如何工作的。 无论何时返回空行或没有任何信息,您都没有任何访问权限和任何信息。 没有错误,只是任何东西。 是不是很流行,我不知道,我之前听说过phantomjs,似乎没什么,丑陋的,没有用。

我在考虑 webDriver 例如 selenium,没有必要在客户端运行 selenium,在服务器上运行似乎有点贵。 没有主机可以为您提供带有 gui 的 vds,而不是 ubuntu 服务器,因为您需要浏览器。


我意识到没有解决方案


我有一个在 js 上运行的脚本,它具有多种功能,不仅可以解析,还有点像 bot,可以分析用户数据、关注、取消关注、发布数据并运行抛出用户。 问题是“如何在服务器上运行浏览器功能”,我只是想通过一次在服务器上启动 100 个帐户的程序来模拟浏览器,但我猜这是不可能的。 也许我会用“没有解决方案,你不能在服务器上运行浏览器”的解决方案来结束这个问题。 WebDriver 使用成本太高。 没有程序,对于 webDrivers,您可以立即使用,例如:Chrome、Firefox、Opera、Yandex 等等,但它们也使用大量 RAM,这在 VDS 服务器上太昂贵了。

您无需登录即可抓取Instagram。 与 JS 一起工作时,我使用了 requests_html 包来为您完成这项工作。 你可以从 instagram_scraper( https://github.com/meetmangukiya/instagram-scraper ) 开始,它的灵感来自 twitter-scraper( https://github.com/kennethreitz/twitter-scraper ) 的作者 Kenneth Reitz requests 和 requests_html。 主要思想是在没有令牌或登录的情况下进行抓取

这两个脚本都激励我创建一个不需要登录的刮板 至少,这是一个很好的起点。

2018 年 9 月 22 日更新:我遵循为 Selenium、Chrome 和 Python 设置数字海洋服务器,但在我自己的服务器上。 诀窍是创建一个假显示:从乔纳森那里看到这个,在服务器上运行:)

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)

我觉得你可以用phantomjs ,我已经用这个完成了很多需要登录或者js加载操作的蜘蛛。

您可以使用 Phantomjs 登录,它可以设置 cookie、会话数据和请求头。 你需要做的就是搜索方法,像这样: phantomjs login Instagram

当你使用phantomjs时,最重要的是每次你要做下一步时,你必须确保页面或相关元素加载完成。 因为页面或者js加载需要加速时间,所以有时候你还需要发送额外的args来获取页面加载,否则没有相关元素就无法开始下一步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM