硒:Chrome和Phantomjs之间的差异?-Python



我想为bing的搜索结果做网络刮擦。基本上,我正在使用硒,其想法是使用硒自动单击" Next"并删除每个页面的搜索结果的URL。我在Ubuntu上使用Chrome浏览器运行它:

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('Stackoverflow is good',10)

它运行完美,当我运行代码时,它会启动一个Chrome浏览器,我可以看到它自动访问下一页,并获取10页搜索结果的URL。

但是,我的目标是成功地在AWS上运行这些代码。原始代码失败,错误" Chrome无法启动"。在Google之后,似乎我需要在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?

感谢您的帮助!

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

phamtomjs是无头浏览器的另一种方法,但是由于维护不足,如今phantomjs遇到了错误。

您可以将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/");

希望它能帮助您:)

最新更新