Selenium:Chrome与PhantomJS的区别?--python

问题描述:

我想为Bing的搜索结果做网页抓取。基本上,我使用硒,想法是使用硒自动点击“下一步”,并废除每个页面的搜索结果的URL。我把它与Chrome浏览器在我的Ubuntu上运行:Selenium:Chrome与PhantomJS的区别?--python

from selenium import web driver 
import os 

class bingURL(object): 

    def __init__(self): 
     self.driver=webdriver.Chrome(os.path.expanduser('./chromedriver')) 

    def get_urls(self,url): 
     driver=self.driver 
     driver.get(url) 
     elems = driver.find_elements_by_xpath("//a[@href]") 
     href=[] 
     for elem in elems: 
      link=elem.get_attribute("href") 
      try: 
       if 'bing.com' not in link and 'http' in link and 'microsoft.com' not in link and 'smashboards.com' not in link: 
        href.append(link) 
      except: 
       pass 

     return list(set(href)) 




    def search_urls(self,keyword,pagenum): 
     driver=self.driver 
     searchurl=self.lookup(keyword) ### url of first page of google search 
     driver.get(searchurl) 
     results=self.get_urls(searchurl) 

     for i in range(pagenum): 

      driver.find_elements_by_class_name("sb_pagN")[0].click() # click 'Next' of bing search result 
      time.sleep(5) # wait to load page 
      current_url=driver.current_url 
      #print(current_url) 
      #print(self.get_urls(current_url)) 
      results[0:0]=self.get_urls(current_url) 

     driver.quit() 
     return results 






    def lookup(self,query): 

     return "https://www.bing.com/search?q="+query 



if __name__ == "__main__": 
    g=bingURL() 
    result=g.search_urls('* is good',10) 

它完美的作品,当我运行的代码,它推出Chrome浏览器,我可以看到它进入下一个页面自动,并获得网址10页搜索结果。

但是,我的目标是成功在AWS上运行这些代码。原始代码失败,错误“Chrome无法启动”。谷歌后,似乎我需要在AWS上使用像PhantomJS这样的无头浏览器。因此,我安装PhantomJS,并更改def __init__(self):到:

def __init__(self): 
     self.driver=webdriver.PhantomJS() 

但是,它不能单击“下一步”了,而且使用旧代码不能废的URL。错误信息是:

File ".../SEARCH_BING_MODULE.py", line 70, in search_urls 
    driver.find_elements_by_class_name("sb_pagN")[0].click() 

IndexError: list index out of range 

它看起来像改变浏览器完全改变规则。我应该如何修改更原始的代码以使其再次工作?或者如何使用selenium + PhantomJS来取消Bing搜索结果的URL?

感谢您的帮助!

+0

这是可能与浏览器的用户代理字符串有关,如果您让Phantom的Chrome匹配,会发生什么?或者只是使用无头Chrome浏览器。 – jonrsharpe

+0

无头Chrome与PhantomJS等工具类似。两者都可用于无头环境下的自动测试。两者之间的主要区别在于Phantom使用旧版本的WebKit作为其渲染引擎,而Headless Chrome则使用最新版本的Blink – iamsankalp89

是的,您可以使用无头浏览器执行所有3点的所有操作。不要使用HTMLUnit,因为它有许多配置问题。

PhamtomJS是另一种无头浏览器的方法,但PhantomJs最近因缺乏维护而存在bug。

您可以使用chromedriver本身作为无头工作。

你只需要在chromedriver下面通过一个选项: -

chromeOptions.addArguments("--headless"); 

的完整代码会出现这样的: -

System.setProperty("webdriver.chrome.driver","D:\\Workspace\\JmeterWebdriverProject\\src\\lib\\chromedriver.exe"); 
ChromeOptions chromeOptions = new ChromeOptions(); 
chromeOptions.addArguments("--headless"); 
chromeOptions.addArguments("--start-maximized"); 
WebDriver driver = new ChromeDriver(chromeOptions); 
driver.get("https://www.google.co.in/"); 

希望它会帮助你:)