Настройка приложения Flask, которое использует заголовок Selenium на сервере Ubuntu 18.04 LTS - PullRequest
0 голосов
/ 26 мая 2019

У меня есть колба, которая использует селен под капотом, чтобы делать определенные вещи. Я собираюсь развернуть приложение Flask на сервере Ubuntu. Тем не менее, мне было интересно, запущен ли веб-браузер с селеном, он будет безголовым или безголовым?

Я захожу по SSH на сервер Ubuntu, а затем устанавливаю python pip После того, как я установил Python pip, я установил virtualenv и git clone мой код в sourve venv / bin / activ. Я устанавливаю все свои требования (включая селен)

Затем я устанавливаю Chrome следующим образом:

sudo curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add sudo echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list sudo apt-get -y update sudo apt-get -y install google-chrome-stable

и затем я устанавливаю chromedriver следующим образом:

wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip unzip chromedriver_linux64.zip sudo mv chromedriver /usr/bin/chromedriver sudo chown root:root /usr/bin/chromedriver sudo chmod +x /usr/bin/chromedriver

Мое приложение Flask выглядит так:

from flask_socketio import SocketIO
from flask_cors import CORS
import logging, time, sys
from flask import Flask, request, jsonify, render_template, redirect
messages = {}
lo = {}
task_log = {}
app = Flask(__name__,template_folder='template')
socketio = SocketIO(app)
@app.route('/activity',methods=["GET"])
def run():
    browser.get("https://store.nike.com/us/en_us/pw/just-in")
    for x in range (0,1):
        try:
            link = browser.find_element_by_xpath('''//*[@id="NavigationMenu-0"]/div/div[''' + str(random.randint(1,3)) + ''']/a[''' + str(random.randint(1,3)) + ''']''')
            href = link.get_attribute("href")
            browser.get(href)
            print(f'{Fore.GREEN}{str(datetime.datetime.now())}  - [INFO] Went to a random section')
        except:
            print(f'{Fore.RED}{str(datetime.datetime.now())}  - [ERROR] Failed to navigate to a random section')
            return "Pre Activity Error Code 0"
        try:
            if activity == "basic":
                for x in range (0,random.randint(1,10)):
                    browser.execute_script(f"window.scrollTo(0, {random.randint(1,1900)})")
                    try:
                        browser.find_element_by_class_name("bx-button").click()
                        print(f'{Fore.GREEN}{str(datetime.datetime.now())}  - [INFO] Clicked close button')
                    except:
                        print(f'{Fore.RED}{str(datetime.datetime.now())}  - [ERROR] Failed to click close button or button was not present')

                    time.sleep(random.randint(1,10))
        except:
            return "Pre Activity Error Code 1"

Так что после того, как я установил Селен + Хромедрайвер и все остальное, будет ли селен работать без головы или без головы? Есть ли способ заставить его возглавить?

Спасибо

P.S (Является ли мой процесс установки хроматографа селеном + корректным? Я использовал для этого учебник, поэтому просто хочу убедиться)

1 Ответ

2 голосов
/ 27 мая 2019

Вы не опубликовали ту часть кода, которая определяет фактический экземпляр браузера.

Чтобы запустить Selenium на сервере, вам потребуется создать виртуальный дисплей.Вы можете сделать это, используя PyVirtualDisplay , либо Xvfb , Xephyr или Xvnc .

После настройки вашего виртуальногона дисплее вы можете запустить Selenium с Chromedriver в режиме без головы, например:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome(chrome_options=options)
browser.get('http://www.google.com')

или если вы хотите запустить его без головы:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://www.google.com')

Подробнее о возможностях Chromedriver можно прочитать здесь .

...