Colin-XKL / Colinx-Blog

Colin's Personal Blog http://blog.colinx.one
http://blog.colinx.one
3 stars 0 forks source link

Huginn指南:为任意网站制作RSS :: Colinx Blog — Colin的个人博客 #42

Open Colin-XKL opened 2 years ago

Colin-XKL commented 2 years ago

https://blog.colinx.one/posts/huginn%E6%8C%87%E5%8D%97%E4%B8%BA%E4%BB%BB%E6%84%8F%E7%BD%91%E7%AB%99%E5%88%B6%E4%BD%9Crss/

Huginn使用多个不同功能的Agent组合搭配来实现一系列功能,一个Agent可以执行特定的操作,并产生一个Event,你可以指定他产生的

ernestyu commented 2 years ago

请教一下。用browserless抓取网站"https://www.sciencedirect.com/journal/journal-of-financial-economics"。把网址粘贴到payload的url后面字段,其它代码和你上面的例子一样。返回结果是一个禁止访问的页面。检查结果有 "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/106.0.5249.0 Safari/537.36"。

直接用部署了docker版browserless来检查,发现只要把headless选项关掉,网页就能正常访问。如果打开,则返回结果和上面一样,且user-agent也一样。那就应该是这个user-agent的问题。但是试了很多次,在Post Agent里不知道怎么定制user_agent。返回结果一直包含 "HeadlessChrome/106.0.5249.0"。

请问Post Agent里用什么字段来自定义user-agent?右侧给出的那些字段都试过不起作用,要么是没用对。

Colin-XKL commented 2 years ago

User Agent 放到post请求的header里就好 "headers": { "Cache-Control": "no-cache", "Content-Type": "application/json", "AAA": "BBB" },

具体的格式和字段的值可以多参考浏览器开发人员工具Network网络选项卡里的信息

@ernestyu

ernestyu commented 2 years ago

@Colin-XKL

User Agent 放到post请求的header里就好 "headers": { "Cache-Control": "no-cache", "Content-Type": "application/json", "AAA": "BBB" },

具体的格式和字段的值可以多参考浏览器开发人员工具Network网络选项卡里的信息

@ernestyu

谢谢,已搞定。貌似在Huginn这里设置无效,是在browserless docker启动时,要加入参数,比如,$ docker run -e "DEFAULT_HEADLESS=false" -p 3000:3000 , 这样才可以正常使用。 如果是在群晖里跑borwserless,就要在环境变量里加上 DEFAULT_HEADLESS ,把值设置为 false。这样它发送出去的header就是正常Chrome,而不是HeadlessChrome

Colin-XKL commented 2 years ago

嗯搞定了就好,也感谢你的反馈,我回头更新一下文章

Yafeiml commented 4 months ago

折腾了一下午,一直报错,求教大佬指点。 [ { "body": "Not Found\n", "status": 404, "headers": { "Content-Type": "text/plain; charset=UTF-8", "Date": "Tue, 11 Jun 2024 12:58:07 GMT", "Connection": "keep-alive", "Keep-Alive": "timeout=5", "Transfer-Encoding": "chunked" } } ] 换什么网址都是这个报错,用ucrl测试就没有问题,可以正常返回结果: curl -X POST http://192.168.31.54:3000/content \ -H "Cache-Control: no-cache" \ -H "Content-Type: application/json" \ -d '{"url": "https://www.baidu.com/"}'

Colin-XKL commented 4 months ago

@Yafeiml 折腾了一下午,一直报错,求教大佬指点。 [ { "body": "Not Found\n", "status": 404, "headers": { "Content-Type": "text/plain; charset=UTF-8", "Date": "Tue, 11 Jun 2024 12:58:07 GMT", "Connection": "keep-alive", "Keep-Alive": "timeout=5", "Transfer-Encoding": "chunked" } } ] 换什么网址都是这个报错,用ucrl测试就没有问题,可以正常返回结果: curl -X POST http://192.168.31.54:3000/content \ -H "Cache-Control: no-cache" \ -H "Content-Type: application/json" \ -d '{"url": "https://www.baidu.com/"}'

你 huginn里面是怎么配置的, 能否贴一下

Colin-XKL commented 4 months ago

@Yafeiml 还有需要确认下你使用的 browserless 是哪个版本。 如果是使用 rssman 里面配置的, 或者指定的镜像为browserless/chrome, 那应该没问题。 如果是使用的官网文档里最新的 ghcr.io/browserless/chromium, 那情况可能会有点不一样, 这个是 v2 版本,api 等方面会有一些不同

Yafeiml commented 4 months ago

@Colin-XKL @Yafeiml 还有需要确认下你使用的 browserless 是哪个版本。 如果是使用 rssman 里面配置的, 或者指定的镜像为browserless/chrome, 那应该没问题。 如果是使用的官网文档里最新的 ghcr.io/browserless/chromium, 那情况可能会有点不一样, 这个是 v2 版本,api 等方面会有一些不同

配置就是使用您提供的,期间也做过各种调整,加useragent,调整参数值等等: { "post_url": "http://192.168.31.54:3000/chromium/content", "expected_receive_period_in_days": "1", "content_type": "json", "method": "post", "payload": { "url": "https://pccz.court.gov.cn/pcajxxw/pcgg/ggdh?lx=0" }, "headers": { "Cache-Control": "no-cache", "Content-Type": "application/json" }, "emit_events": "true", "no_merge": "false", "output_mode": "clean" }

另外browserless使用的是官方(2.13.0)版本,应该是最新的,但是看文档API的使用方法和路径应该是没有差别的,并且curl可以正常获取页面内容,感觉是Post Agent的格式问题,但是官方以及各路搜索都没有找到相关的资料,有点麻,感谢大佬回复。

补充下browserless的错误日志: browserless.io:server:trace Handling inbound HTTP request on "POST: /content" +13s browserless.io:server:error No matching HTTP route handler for "POST: http://0.0.0.0:3000/content?launch=%7B%7D" +13s 感觉像是Post Agent调用方式出错了。

Colin-XKL commented 4 months ago

另外browserless使用的是官方(2.13.0)版本,应该是最新的,但是看文档API的使用方法和路径应该是没有差别的,并且curl可以正常获取页面内容,感觉是Post Agent的格式问题,但是官方以及各路搜索都没有找到相关的资料,有点麻,感谢大佬回复。

我看了下 v2 版本的文档, content这个接口没有太大变化应该是可以用的. 假设你的 browserless 实例部署在192.168.31.54:3000, huginn post agent 里面post url 为 http://192.168.31.54:3000/content 这样应该就可以了, 再试下呢

Yafeiml commented 4 months ago

另外browserless使用的是官方(2.13.0)版本,应该是最新的,但是看文档API的使用方法和路径应该是没有差别的,并且curl可以正常获取页面内容,感觉是Post Agent的格式问题,但是官方以及各路搜索都没有找到相关的资料,有点麻,感谢大佬回复。

我看了下 v2 版本的文档, content这个接口没有太大变化应该是可以用的. 假设你的 browserless 实例部署在192.168.31.54:3000, huginn post agent 里面post url 为 http://192.168.31.54:3000/content 这样应该就可以了, 再试下呢

试过多次了确实不行,browserless的各种配置也都试过多种,感谢您的回答,我抽空继续查找下原因。

Colin-XKL commented 4 months ago

我搭了一个干净的环境测试了下, v2 版本的 browserless 与 最新版本的 huginn 协作时确实有问题. 暂时没有很好的解决方案, 可以考虑使用 v1 版本的 browserless (镜像为 browserless/chrome )或者 使用PhantomJS来渲染页面.

docker hub 上的这个页面默认就是 v1 版本的, 可以直接使用. https://hub.docker.com/r/browserless/chrome

@Yafeiml

Yafeiml commented 4 months ago

我搭了一个干净的环境测试了下, v2 版本的 browserless 与 最新版本的 huginn 协作时确实有问题. 暂时没有很好的解决方案, 可以考虑使用 v1 版本的 browserless (镜像为 browserless/chrome )或者 使用PhantomJS来渲染页面.

docker hub 上的这个页面默认就是 v1 版本的, 可以直接使用. https://hub.docker.com/r/browserless/chrome

@Yafeiml

原来是版本问题,大佬给力,看来新不一定是好。 ![Uploading PixPin_2024-06-14_09-06-48.jpg…]()