如何抓取 Angular JS 网络应用程序?

How to crawl an Angular JS web app?

我正在尝试抓取一个将登录作为第一个障碍并构建在 angular js 上的网络应用程序。我正在使用 scrapy 和 selenium 来抓取网站,但登录时出现问题。我有这个 post 我在其中寻求帮助 但我没有得到任何帮助。问题是当我使用 selenium(如下所示)读取 body 元素的 innerHTML 时,它给了我空白响应。为什么会这样?是因为 HTTPS 还是因为任何其他权限问题?

此外,如果有人可以帮助我了解如何使用 scrapy 和 selenium 以及登录名和 cookie 来抓取网站。这真的很有帮助。

def crawl_url(url, run_headless=True):
    if run_headless:
        display = Display(visible=0, size=(1024, 768))
        display.start()

    url = correct_url(url)
    browser = webdriver.PhantomJS(service_args=['--load-images=no'])
    login_url = "https://domain.com/login"
    browser.get(login_url)
    time.sleep(15)
    element = browser.find_element_by_xpath('/html/body')
    print element.get_attribute('innerHTML')

已知 PhantomJS 在 Angular 方面存在问题,建议您改用 Chrome。您可以从 https://devblog.supportbee.com/2014/10/27/setting-up-cucumber-to-run-with-Chrome-on-Linux/ 安装 chromedriver 并替换

browser = webdriver.PhantomJS(service_args=['--load-images=no'])

browser = webdriver.Chrome()

然后这应该可以工作。您也可以使用名为 Protractor 的框架,该框架专门用于测试 Angular 页面,它知道如何 运行 和解析 JavaScript 以获取 html。它有一个基于 selenium 的 webdriverjs 包装器。