当前位置: 首页 > 面试题库 >

适用于GAE的Python Headless浏览器

陆宏扬
2023-03-14
问题内容

我正在尝试将Angular.js客户端与Google Appengine上的webapp2一起使用。

为了解决SEO问题,该想法是使用无头浏览器运行javascript服务器端并将生成的html提供给搜寻器。

是否有在Google App Engine上运行的python无头浏览器?


问题答案:

现在,可以使用自定义运行时在App Engine Flex上完成此操作,因此我要添加此答案,因为此问题是在Google中弹出的第一件事。

我将此自定义运行时基于其他使用预先构建的python运行时的GAE flex微服务

项目结构:

webdrivers/
- geckodriver
app.yaml
Dockerfile
main.py
requirements.txt

app.yaml:

service: my-app-engine-service-name
runtime: custom
env: flex
entrypoint: gunicorn -b :$PORT main:app --timeout 180

Dockerfile:

FROM gcr.io/google-appengine/python
RUN apt-get update
RUN apt-get install -y xvfb
RUN apt-get install -y firefox
LABEL python_version=python
RUN virtualenv --no-download /env -p python
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
ADD requirements.txt /app/
RUN pip install -r requirements.txt
ADD . /app/
CMD exec gunicorn -b :$PORT main:app --timeout 180

requirements.txt:

Flask==0.12.2
gunicorn==19.7.1
selenium==3.13.0
pyvirtualdisplay==0.2.1

main.py

import os
import traceback

from flask import Flask, jsonify, Response
from selenium import webdriver
from pyvirtualdisplay import Display

app = Flask(__name__)

# Add the webdrivers to the path
os.environ['PATH'] += ':'+os.path.dirname(os.path.realpath(__file__))+"/webdrivers"

@app.route('/')
def hello():
    return 'Hello!!'

@app.route('/test/', methods=['GET'])
def go_headless():
    try:
        display = Display(visible=0, size=(1024, 768))
        display.start()
        d = webdriver.Firefox()
        d.get("http://www.python.org")    
        page_source = d.page_source.encode("utf-8")
        d.close()
        display.stop()
        return jsonify({'success': True, "result": page_source[:500]})
    except Exception as e:
        print traceback.format_exc()
        return jsonify({'success': False, 'msg': str(e)})

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

从此处下载geckodriver(linux 64):

https://github.com/mozilla/geckodriver/releases

其他说明:

  • 请注意您正在使用的geckodriver,firefox和selenium的版本,因为它可能是finnickey,出现此错误 WebDriverException: Message: Can't load the profile. Possible firefox version mismatch. You must use GeckoDriver instead for Firefox 48+. Profile Dir: /tmp/tmp 48P If you specified a log_file in the FirefoxBinary constructor, check it for details.
  • 除非您使用旧版geckodriver / firefox,否则请勿设置DesiredCapabilities().FIREFOX["marionette"] = False https://github.com/SeleniumHQ/selenium/issues/5106
  • display = Display(visible=0, size=(1024, 768))需要修复此错误:如何修复Selenium WebDriverException:在连接之前,浏览器似乎已退出?

要在本地测试:

docker build . -t my-docker-image-tag
docker run -p 8080:8080 --name=my-docker-container-name my-docker-image-tag

部署到应用引擎:

gcloud app deploy app.yaml --version dev --project my-app-engine-project-id


 类似资料:
  • 问题内容: 什么是HSQLDB数据库的最佳浏览器工具? 问题答案: HSQL具有称为数据库管理器的内置GUI查询工具。在数据库文件的目录中运行: 然后将配置设置为: 允许我以非常方便的方式编辑所需内容。

  • 问题内容: 请注意,和现在都弃用(如2018年6月的)。 我一直在寻找一种监视对象或变量更改的简便方法,我发现Mozilla浏览器支持,但IE不支持。所以我开始四处搜寻,看看是否有人写过类似的东西。 我唯一发现的就是jQuery插件,但是我不确定这是否是最好的方法。我当然在我的大多数项目中都使用jQuery,所以我并不担心jQuery方面的问题。 无论如何,问题是:有人可以向我展示该jQuery插

  • 问题内容: 由于GAE具有严格的限制,例如-“ Java应用程序无法使用任何用于写入文件系统的类”。 是否有一个好的Java PDF库可以将PDF写入内存以流式传输到云? 问题答案: 根据这个在Google网上论坛上的主题(需要身份验证),PDFjet可以在GAE上使用(已进行了少许修改,以在某些地方用流替换文件)。正如他们在线程中所说: 这是一个相当低级的库,但是对于简单的任务应该可以。 到目前

  • 问题内容: 我有一个正则表达式:。如果可以的话,可以在浏览器控制台中正常工作。 在Node.js中执行时会抛出同一行代码。 我想匹配字符串中包含的所有变量,如果用和括起来,则忽略它们。 问题答案: 您可以使用此正则表达式(可能需要稍作更改,具体取决于您是要检测行的开始/结束还是这些类型的工具)。我在内的值周围添加了一个补偿组,因为此正则表达式还将匹配之前和之后的char 。 如果您可以放置在字符串

  • 问题内容: 我想使用浏览器浏览领域数据库。我是Linux用户,我知道领域浏览器仅适用于MacOS。我也了解Facebook上的Stetho,也了解了这个项目https://github.com/uPhyca/stetho- realm 。但是,我不想在项目中添加不必要的库,而是安装Google Chrome浏览器来浏览数据库,这对我来说很奇怪。因此,您知道是否有适用于Linux的领域浏览器吗? 提

  • 问题内容: 我正在使用基于角度和jquery的网站。我有一个文本输入字段,用于验证浮点数数组。我的要求是限制用户输入字母等。 问题是我正在使用,但无法在android默认浏览器中工作,但在android chrome中可以正常工作。 我进行了很多搜索,但无法获得任何解决方案。 我的示例代码:- 我也尝试过:- 工作小提琴 注意:-我无法使用事件,因为android默认浏览器无法监听此事件。 问题答