Избегайте открытия браузера на удаленном сервере во время вызова селена

Я написал приложение selenium с помощью webdriver. Я хочу запустить его на удаленном сервере. Когда я это делаю, войдя на сервер через шпатлевку (вместе с Xming), селен пытается открыть браузер только на сервере и загружать страницы через внешний дисплей. Однако при этом требуется много времени, чем если бы я мог открыть браузер только на моем локальном хосте (а не на сервере). Возможно ли, что такая вещь произойдет или открытие на сервере только является единственным вариантом (который является болезненно медленным). Пожалуйста, скажите мне, если я тоже что-то упустил.

Спасибо заранее.

Ответ 1

Попробуйте использовать Selenium Grid вместо Putty для запуска вашего приложения Selenium на удаленном сервере. На веб-сайте Selenium есть превосходное руководство по быстрому запуску для использования селеновой сетки: http://code.google.com/p/selenium/wiki/Grid2.

Ответ 2

Вы можете запустить Selenium с помощью "безголового" драйвера, HtmlUnitDriver, который фактически не открывает браузер:

http://code.google.com/p/selenium/wiki/HtmlUnitDriver

Примечание. HtmlUnitDriver примет аргумент, чтобы он мог эмулировать определенный драйвер.

Ответ 3

@Lori

Я реализовал код, но он все еще пытается открыть его из шпатлевки, поэтому требуется много времени, чтобы выполнить эту работу. Код выглядит следующим образом: 'code'

import sys
from scrapy.spider import BaseSpider
from scrapy.http import FormRequest
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from scrapy.http import Request

from selenium import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

class DmozSpider(BaseSpider):
name = "linkedin_crawler"
#defence news 
global company
global query
companyFilename = '<filename>'
f=open(companyFilename,"r")
f.seek(0)
company = f.readline().strip()
f.close()
queryFilename = '/var/www/Symantec/recon/recon/' +company+ '/Spider/LinkedIn/query.txt'
f = open(queryFilename)
f.seek(0)    
query=f.readline().strip()
f.close()

start_urls = ['https://www.linkedin.com/uas/login'];


def __init__(self):
    BaseSpider.__init__(self)
capabilities = webdriver.DesiredCapabilities()
self.selenium = webdriver.Remote(command_executor = 'http://localhost:5000/wd/hub', desired_capabilities = capabilities.FIREFOX)

def __del__(self):
    self.selenium.quit()


def parse(self, response):
sel= self.selenium
    sel.get(response.url)
global query

elem1 = sel.find_element_by_name("session_key")
elem2 = sel.find_element_by_name("session_password")
elem1.send_keys("myemailid")
elem2.send_keys("mypassword")
elem2.send_keys(Keys.RETURN)

    return Request(query, callback=self.page_parse)


def page_parse(self,response):
global query
global company


sel= self.selenium
    sel.get(query)

for i in xrange(10):
#for i in xrange(5):

    nameFilename = ''

    #print hxs
    nlist = sel.find_elements_by_xpath('//ol[@class="search-results"]/li/div/h3/a')


    fh = open(nameFilename,"a") 

    for j in xrange(len(nlist)):

        url = nlist[j].get_attribute("href").encode('utf-8')
        name =  nlist[j].text.encode('utf-8')

        fh.write(name)
        fh.write("<next>")
        fh.write(url)
            fh.write('\n')


    fh.close()

    next = sel.find_elements_by_xpath('//a[@class="page-link"]')
    next[0].click()
    time.sleep(5)

Чтобы настроить этот script на сервере, я использую putty для запуска команды. Но затем он снова использует Xming для открытия браузера, который замедляет процесс. Итак, как запустить script, не открывая браузер на моей локальной машине через Xming, чтобы это не стало узким местом. Благодаря