【问题标题】:How to crawl an Angular JS web app?如何抓取 Angular JS 网络应用程序?
【发布时间】:2015-06-23 16:28:19
【问题描述】:

我正在尝试抓取一个以登录为第一个障碍并且基于 Angular js 构建的网络应用程序。我正在使用scrapy和selenium来爬取网站,但登录时出现问题。我有这篇文章在哪里寻求帮助https://stackoverflow.com/questions/30926880/what-is-the-best-way-for-crawling-with-scrapy-and-selenium-angularjs-website但我没有得到任何帮助。问题是当我使用 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')

【问题讨论】:

  • 你能分享一个网站链接吗?
  • innerHTML是不是被javascript设置的,所以在selenium读取的时候不会出现在开头?

标签: python angularjs selenium web-crawler scrapy


【解决方案1】:

已知 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 包装器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2021-06-05
    相关资源
    最近更新 更多