Старайтесь не открывать браузер на удаленном сервере во время вызова селена
Я написал приложение селена с помощью веб-драйвера. Я хочу запустить его на удаленном сервере. Когда я делаю это, заходя на сервер через шпаклевку (вместе с Xming), selenium пытается открыть браузер только на сервере и загрузить страницы через внешний дисплей. Однако при этом требуется больше времени, чем если бы я мог открыть браузер только на моем локальном хосте (а не на сервере). Возможно ли такое, или открытие только на сервере - единственный вариант (который мучительно медленный). Пожалуйста, скажите мне, если я что-то упустил.
Заранее спасибо.
3 ответа
Попробуйте использовать Selenium Grid вместо Putty для запуска приложения Selenium на удаленном сервере. На веб-сайте Selenium есть отличное краткое руководство по использованию Selenium Grid: http://code.google.com/p/selenium/wiki/Grid2.
Вы можете запустить Selenium с "безголовым" драйвером, HtmlUnitDriver, который фактически не открывает браузер:
http://code.google.com/p/selenium/wiki/HtmlUnitDriver
Примечание: HtmlUnitDriver будет принимать аргумент, чтобы он мог эмулировать определенный драйвер.
@Lori
Я реализовал код, но он все еще пытается открыть его из замазки, поэтому на выполнение работы уходит много времени. Код выглядит следующим образом: "код"
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)
Чтобы настроить этот скрипт на сервере, я использую putty для запуска команды. Но затем он снова использует Xming, чтобы открыть браузер, что замедляет процесс снова. Итак, как запустить скрипт, не открывая браузер на моей локальной машине через Xming, чтобы это не стало узким местом. Спасибо