PHP方法仅在源页面上执行javascript后才回显span的内容

时间:2018-12-26 00:40:58

标签: php curl file-get-contents

您好,我正在寻找一种简单的仅PHP方法(即最终用户上没有JS / Jquery / Ajax),可以在JS在源页面上运行后执行file_get_contents或cURL。

我有2个工作示例,从远程获取带有Class =“ CurrentBG”的特定SPAN,但是此SPAN的内容是由一个JS文件创建的,该JS文件恰好在页面末尾运行。因此,同时使用cURL和get_file_contents将---作为内容并打印出来,而不是打印变化的内容(这是SPAN的默认内容,直到被JS函数替换为止)。

这是我的get_file_contents示例

<?php 

$page = file_get_contents('https://haspdenbloodglucose.herokuapp.com/');
$doc = new DOMDocument();
$doc->loadHTML($page);
$spans = $doc->getElementsByTagName('span');
foreach($spans as $span) {
    // Loop through the DIVs looking for one withan id of "content"
    // Then echo out its contents (pardon the pun)
    if ($span->getAttribute('class') === 'currentBG') {
         echo $span->nodeValue;
    }
}

?>

这是我的cURL示例

<?php
$curl = curl_init('https://haspdenbloodglucose.herokuapp.com/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

$page = curl_exec($curl);

if(curl_errno($curl)) // check for execution errors
{
    echo 'Scraper error: ' . curl_error($curl);
    exit;
}

curl_close($curl);

$regex = '/<span class="currentBG">(.*?)<\/div>/s';
if ( preg_match($regex, $page, $list) )
    echo $list[0];
else 
    print "Not found"; 
?>

我想从Amazon Kindle Paperwhite / touch上的浏览器上的浏览器运行此程序(不要问我为什么哈哈)。但是网站的功能非常有限,因此我尝试使最终用户运行的内容尽可能地有限...

这将用于通过简单的数字钟面样式显示向用户显示其平板电脑上的血糖数据。

谢谢

1 个答案:

答案 0 :(得分:0)

cURL将不会执行任何JavaScript,这同样适用于buildscript { ext.kotlin_version = '1.3.11' ext.ktor_version = '1.0.1' ext.dokka_version = '0.9.17' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.17" } } plugins { id "org.jetbrains.dokka" version '0.9.17' } apply plugin: 'java' apply plugin: 'kotlin' apply plugin: 'application' apply plugin: 'maven' group 'io.github.dogo' version '1.0-SNAPSHOT' mainClassName = "io.github.dogo.core.boot.BootKt" sourceCompatibility = 1.8 repositories { mavenCentral() jcenter() maven {url 'https://jitpack.io'} maven { name = 'sponge' url = 'https://repo.spongepowered.org/maven' } } dependencies { compile "org.jetbrains.kotlin:kotlin-reflect" compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" compile "io.ktor:ktor-server-core:$ktor_version" compile "io.ktor:ktor-server-netty:$ktor_version" compile 'net.dv8tion:JDA:3.8.1_447' compile 'org.mongodb:mongodb-driver:3.6.3' compile 'org.spongepowered:configurate-json:3.6' compile 'com.fasterxml.jackson.core:jackson-databind:2.0.1' compile 'com.mashape.unirest:unirest-java:1.3.1' compile 'org.slf4j:slf4j-simple:1.6.1' compile 'org.apache.logging.log4j:log4j-core:2.11.1' compile 'org.apache.logging.log4j:log4j-api:2.11.1' compile 'org.jetbrains.kotlin:kotlin-script-runtime:1.3.11' compile 'org.jetbrains.kotlin:kotlin-script-util:1.3.11' compile 'org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.11' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1' } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } jar { manifest { attributes 'Main-Class': 'io.github.dogo.core.boot.BootKt' } from { configurations.compile .findAll { !it.name.endsWith('pom') } .collect { it.isDirectory() ? it : zipTree(it) } } } dokka { outputFormat = 'html' outputDirectory = "$buildDir/docs" } 。您只会获得没有动态呈现内容的DOM。

您应该尝试探索该网站上的图形如何加载到页面中。您可以使用chrome或firefox [F12]的webdeveloper工具,并在加载应用程序时检查“网络”标签以查找资源网址。

如果幸运的话,您也许可以直接从该来源获取数据。希望这会有所帮助!