Explorar o código

startpage captcha handle

lolcat %!s(int64=2) %!d(string=hai) anos
pai
achega
4e4796bb71
Modificáronse 1 ficheiros con 50 adicións e 0 borrados
  1. 50 0
      scraper/startpage.php

+ 50 - 0
scraper/startpage.php

@@ -408,6 +408,8 @@ class startpage{
 			//$html = file_get_contents("scraper/startpage.html");
 		}
 		
+		$this->detect_captcha($html);
+		
 		if(
 			preg_match(
 				'/React\.createElement\(UIStartpage\.AppSerpWeb, ?(.+)\),$/m',
@@ -1057,6 +1059,8 @@ class startpage{
 			}
 		}
 		
+		$this->detect_captcha($html);
+		
 		$out = [
 			"status" => "ok",
 			"npt" => null,
@@ -1186,6 +1190,8 @@ class startpage{
 			}
 		}
 		
+		$this->detect_captcha($html);
+		
 		if(
 			preg_match(
 				'/React\.createElement\(UIStartpage\.AppSerpVideos, ?(.+)\),$/m',
@@ -1326,6 +1332,8 @@ class startpage{
 			}
 		}
 		
+		$this->detect_captcha($html);
+		
 		if(
 			preg_match(
 				'/React\.createElement\(UIStartpage\.AppSerpNews, ?(.+)\),$/m',
@@ -1526,4 +1534,46 @@ class startpage{
 			$text
 		);
 	}
+	
+	private function detect_captcha($html){
+		
+		$this->fuckhtml->load($html);
+		
+		$title =
+			$this->fuckhtml
+			->getElementsByTagName(
+				"title"
+			);
+		
+		if(
+			count($title) !== 0 &&
+			$title[0]["innerHTML"] == "Redirecting..."
+		){
+			
+			// check if it's a captcha
+			$as =
+				$this->fuckhtml
+				->getElementsByTagName(
+					"a"
+				);
+			
+			foreach($as as $a){
+				
+				if(
+					strpos(
+						$this->fuckhtml
+						->getTextContent(
+							$a["innerHTML"]
+						),
+						"https://www.startpage.com/sp/captcha"
+					) !== false
+				){
+					
+					throw new Exception("Startpage returned a captcha");
+				}
+			}
+			
+			throw new Exception("Startpage redirected the scraper to an unhandled page");
+		}
+	}
 }