javascript - php如何像js一样解析DOM?
js就是为html而生,比如,我想验证
<code><style> #demo_div{display:none;} </style> <div id="demo_div"></div> </code>
那么用jquery的话,alert($('#demo_div').attr('display'))就行,但是如果我用服务器端的php如何抓取一个网页中DOM元素,然后结合css来分析它的css属性呢?有没有已经写好的函数or类?
回复内容:
js就是为html而生,比如,我想验证
<code><style> #demo_div{display:none;} </style> <div id="demo_div"></div> </code>
那么用jquery的话,alert($('#demo_div').attr('display'))就行,但是如果我用服务器端的php如何抓取一个网页中DOM元素,然后结合css来分析它的css属性呢?有没有已经写好的函数or类?
补充3:
请在给题主的问题点“赞”之前,好好阅读本问题的补充2和评论7楼,想一下是否应该这样做。
楼主的Y问题本身倒还可以,但题主弄出XY Problem的不良实践,理应再得到一次教训。
补充2:
好嘛你个题主!
闹了半天,一短一长两个答案,调动3个会员6层楼评论,问你半天你才说出最终要做什么!!!
干嘛不早把你的本来目的交代清楚?!
典型的XY Problem——刻舟求剑,问非所求,必须要先麻烦社区半天才能找出来你的目的,真是一点意思也没有。题主请先阅读一下这篇文章。
我看了下题主的问题的反响,几乎所有的问题都是负分,我想题主你这个问题又该找踩了。
你还是好好回去反省下吧,多读几遍《提问的智慧》,少给社区留下一些莫名其妙、浪费时间的猜谜游戏。
补充1:
你也许可以考虑用PHP调用一个只支持HTML+CSS(不带js)的渲染核心,然后把渲染结果拿来利用。这样至少就可以:
- 适当容忍HTML中的微小问题,得到一个标准的树形DOM结构
- 准确处理CSS覆盖关系,正确得到特定元素的任意CSS属性
如果想做斩草除根的实现,就不要想着只在PHP的框架内做得到这个事情。
完全实现你这个需求,单纯依赖任何PHP库,死也做不到。任何。死也不行。没疑问。
因为一个简单的原理:如果只分析网页的HTML字符串文本,我们完全无法判断demo_div最后的某个属性,会处在一个什么状态上。
例如你的例子里,display
属性是用额外的<style></style>
定义的。但我们也可以另外这样去定义:
- DOM标签中内嵌
style
属性定义 - 链接其他的css样式表文件
- CSS覆盖关系,多次定义同一个属性时,只有最高优先级的有效
- 损点的办法,网页中嵌入js去修改css定义过的属性
简单的说:坑人的办法要多少有多少,闭着眼睛想出100来个不成问题。想在PHP的框架中找一个通行的办法,不要想,和永动机一样根本行不通。
解决这个问题的唯一办法,是真的用浏览引擎把这个页面渲染出来,然后才能判断某个DOM元素的某个属性,最终会被改成什么样子。但这样也无法对抗以下类似的问题:
- 渲染引擎造成的区别
- js的额外捣鬼,例如一开始是显示的,过个三五秒钟再隐藏
说了这么多,最终的意思就是:js能够解析DOM,说到底依赖于js在执行时已经有了浏览器环境做铺垫,页面已经被渲染出来。这一点是PHP怎么也达不到的。
甚至严重点说,由于js的存在,从HTML中解析出的DOM结构,其实到最后很大程度上也是不准确的。用js让网页的面貌“大翻天”毫无困难。也就是说,PHP实现的DOM解析,其实从某个角度上来说,相对于浏览器的渲染行为总是片面的,需要你科学的看待和使用。
你的这种问题总是需要依赖人类的智能,见招拆招,同时做好对方网站会不断变化的准备。就像那些火车抢票软件的做法那样。比如你的这个,如果你确定对方网页中<style></style>
块总是出现在demo_div
块的上方,那就用DOM库找到紧临demo_div
前面的<style></style>
,然后用正则表达式做字符串分析就行。原网页变化了,你的对策再跟着改。
不过,如果原网页是在开发者能够控制的范围内的,那恐怕就需要检讨数据传递方式,为什么要给开发者自己惹这么大的麻烦了。
你是不是需要 PHPJQuery ?
补充答案:
骚年,用正确的工具做对的事情,Node.js应该是你的最佳解决方案。
用php开启一个浏览器引擎的进程进行渲染,在里面运行jquery,将结果用ajax返回至php里。
略为高端,楼主我只能帮你到这里了。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります
