2017-06-18 6 views
0

私の目標は、特定のCSS属性値をWebページから取り除くことです。 GuzzleとSymfonyのcss-selectorを使ってスクレーパーをセットアップしました。しかし、私は、CSSセレクタがjQueryと同じように動作しないことを認識しました。これは、.attr()メソッドがないと言うことができる限りです。CSS属性を掻き取るためにヘッドレスブラウザが必要ですか

ヘッドレスブラウザ、ミンク、ヘッドレスクロム、phantom.jsを使用してページをレンダリングし、属性を見つける必要があると思っていますか?

+0

何属性あなたが取得しようとしていますか? [Symfony crawler](https://symfony.com/doc/current/testing.html#extracting-information)には 'attr'メソッドがあります。 –

+0

フォントファミリー、カラーなどのCSS属性。アクティブな属性を取得するには、ブラウザでページをレンダリングする必要があると思います。 symfonyのクローラは、HTML属性を取得しているようです。 – icicleking

答えて

1

ファントomJS(http://phantomjs.org/)は単体テストに使用するのに良いものです。

Chromeはv59でリリースされ、ヘッドレスモードでブラウザを実行できます。しかしそれはまだ窓のために働く。

ヘッドレスChromeはChrome 59で出荷されています。これは、ヘッドレス環境でChrome ブラウザを実行する方法です。基本的には、 クロムなしでChromeを実行している! ChromiumとBlinkレンダリングエンジンによって提供される最新のWebプラットフォーム機能をすべてコマンドラインに提供します。

なぜ便利ですか?

ヘッドレスブラウザは、表示されたUIシェルが不要な自動テストおよびサーバ 環境のための優れたツールです。たとえば、 は、実際のWebページに対していくつかのテストを実行したり、 というPDFを作成したり、ブラウザがURLをレンダリングする方法を調べたりすることができます。

注意://バージョン:ヘッドレスモードが Windowsのサポートは、あなたが持っているもの クロームのバージョンオープンクロムを確認するにはクローム60に来ているクローム59にMacとLinux上で利用可能です。

あなたはここでより多くの情報を見つけることができます:https://developers.google.com/web/updates/2017/04/headless-chrome

1

Minkは、提供するAPIと複数のドライバ(goutte、gecko/firefox ...)とのやりとりが可能なため、良い選択です。

生成されたCSSがjavascriptによって変更されていない場合は、mink + goutteが最適なオプションかもしれませんが、JavaScriptが何らかの形でjavascriptで変更された場合は、mink +セレンの設定が最適です(またはmink + zombie)。この第2のアプローチは、 "goutte"よりもセットアップが遅く、遅くなることを覚えておいてください。

domにアクセスする方法はjQueryと異なりますが、セレクタはほぼ同じですが、実際にはminkには4種類のセレクタが用意されています。

「xpath」セレクタを使ってほとんどすべてを行うことができます。私はまた、 "css" + NodeElementメソッドを検討することをお勧めします。これは、単純であり、ほとんどの場合に役立ちます。

ここでは、2つのアプローチとウィキペディアに基づく一例である。

$xPath = '//a[@id="js-link-box-en"]/@href'; 
$nodeElement = $this->getSession()->getPage()->find('xpath', $xPath); 
$theHrefValue = $nodeElement->getText(); 

Alternativelly:

は、あなたがwikiperia.orgに行くと、あなたは英語のエントリリンクを維持したいと想像

$nodeElement = $this->getSession()->getPage()->find('css', '#js-link-box-en') 
$theHrefValue = $nodeElement->getAttribute('href'); 

私はそれが決定を下すのに役立つことを望みます。

+0

ミンクは面白い解決策のようです。私はまだ、私が探していること、つまりWebページからCSSの属性値を取得することを目的としたコードを見ていないと思います。上のコードでは、ノード上の 'href'属性を探しているようです。私は、リンクの色を取得するために探しています。 Goutteはこれをしますか?私は私の質問では、 "CSS属性値"ではなく "CSS属性"と言っています。わかりやすくするために更新しています。 – icicleking

+0

私はgoutteを恐れています。あなたはそれをすることはできません。 Goutteの代わりにSelenium2Driverを使用してJavaScriptを評価することができるので、クライアント側でjqueryを使用する場合と同じ機能を得るために、「サーバー側でjqueryを実行する」ことができます。 –

関連する問題