【问题标题】:Avoid opening browser on remote server during selenium call避免在 selenium 调用期间在远程服务器上打开浏览器
【发布时间】:2013-05-30 11:33:59
【问题描述】:

我使用 webdriver 编写了一个 selenium 应用程序。我希望在远程服务器上运行它。当我通过 putty(连同 Xming)登录到服务器时,selenium 尝试仅在服务器上打开浏览器并通过外部显示器加载页面。然而,这样做需要很多时间,如果我只能在我的本地主机(而不是服务器)上打开浏览器。这种事情是否可能发生或仅在服务器上打开是唯一的选择(这非常慢)。如果我也遗漏了什么,请告诉我。

提前致谢。

【问题讨论】:

    标签: selenium-webdriver putty remote-server xming


    【解决方案1】:

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

    【讨论】:

    • 我实现了代码,但它仍然尝试从腻子打开它,因此需要花费大量时间才能完成工作。代码如下:
    • 我在link 找到了以下建议。即使我这样做了,它也会显示一个错误:无法打开显示::0
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      @洛瑞

      我实现了代码,但它仍然尝试从 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 在我的本地机器上打开浏览器的情况下运行脚本,以免成为瓶颈。谢谢

      【讨论】:

        猜你喜欢
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 2011-12-18
        • 2017-02-05
        相关资源
        最近更新 更多