我的目标是从网页上提取特定的CSS属性值。我使用Guzzle和Symfony的css选择器设置了一个刮刀。但是,我已经意识到css选择器与jQuery的工作方式不同,据我所知,没有.attr()
方法。
我认为我需要使用无头浏览器,mink,无头chrome,phantom.js才能呈现页面,然后找到属性吗?
答案 0 :(得分:1)
Mink是一个很好的选择,因为它提供的api和它允许与几个驱动程序(goutte,gecko / firefox ...)交互的能力。
如果生成的css没有被javascript修改,mink + goutte可能是最好的选择,但是如果通过javascript以某种方式修改css,则mink + selenium配置可能是最好的(或者mink + zombie)。请记住,第二种方法比“goutte”更难设置和慢。
访问dom的方式与jQuery不同,但选择器大致相同,实际上mink为您提供了4种类型的选择器。
您可以使用“xpath”选择器执行几乎所有操作。我还建议考虑使用“css”+ NodeElement方法,因为它更简单,并且在大多数情况下都有帮助。
这里有一个基于维基百科和2种方法的例子:
想象一下,你去wikiperia.org,你想保留英文输入链接:
$xPath = '//a[@id="js-link-box-en"]/@href';
$nodeElement = $this->getSession()->getPage()->find('xpath', $xPath);
$theHrefValue = $nodeElement->getText();
Alternativelly:
$nodeElement = $this->getSession()->getPage()->find('css', '#js-link-box-en')
$theHrefValue = $nodeElement->getAttribute('href');
我希望在做出决定时能帮助你:)
答案 1 :(得分:1)
PhantomJS(http://phantomjs.org/)是一个很好的我用于单元测试。
Chrome刚刚在v59中发布了在无头模式下运行浏览器的功能。但它确实适用于Windows。
无头Chrome已在Chrome 59中发布。它是运行Chrome的一种方式 浏览器在无头环境中。基本上,没有运行Chrome 铬!它带来了所有现代网络平台功能 Chromium和Blink渲染引擎到命令行。
为什么这有用?
无头浏览器是自动测试和服务器的绝佳工具 您不需要可见UI shell的环境。例如,你 可能想对真实的网页运行一些测试,创建一个PDF 它,或者只是检查浏览器如何呈现URL。
注意:Chrome 59中的Mac和Linux上提供无头模式。 Chrome 60支持Windows支持。要查看的是什么版本的 你有Chrome,打开chrome:// version。
您可以在此处找到更多信息:https://developers.google.com/web/updates/2017/04/headless-chrome