在selenium调用期间避免在远程服务器上打开浏览器

时间:2013-06-04 07:00:11

标签: selenium-webdriver putty remote-server xming

我使用webdriver编写了一个selenium应用程序。我希望在远程服务器上运行它。当我通过putty(以及Xming)登录到服务器时,selenium尝试仅在服务器上打开浏览器并通过外部显示器加载页面。但是,这样做需要花费很多时间,因为我只能在我的localhost(而不是服务器)上打开浏览器。是否有可能发生这样的事情或在服务器上打开只是唯一的选择(这是非常缓慢)。请告诉我,如果我错过了什么。

提前致谢。

3 个答案:

答案 0 :(得分:2)

尝试使用Selenium Grid而不是Putty在远程服务器上运行Selenium应用程序。 Selenium网站提供了一个使用Selenium Grid的优秀快速入门指南:http://code.google.com/p/selenium/wiki/Grid2

答案 1 :(得分:1)

您可以使用“无头”驱动程序HtmlUnitDriver运行Selenium,该驱动程序实际上不会打开浏览器:

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

注意:HtmlUnitDriver将接受一个参数,以便它可以模拟特定的驱动程序。

答案 2 :(得分:0)

@Lori

我实现了代码,但它仍尝试从putty打开它,因此需要花费大量时间才能完成工作。代码如下:'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)

要在服务器上调用此脚本,我使用putty来触发命令。但随后它再次使用Xming打开浏览器,这使得该过程再次变慢。那么,如何在不通过Xming在我的本地机器上打开浏览器的情况下运行脚本,这样就不会成为瓶颈。感谢