Приложение отправляет запросы на веб-сервер, например "(addr)/externalsearch.php?title=(movie)". Затем сайт вызывает веб-скребок Selenium Python и возвращает различную информацию в форме JSON. Все это прекрасно работает примерно 4 или 5 раз. После этого из приложения работают только запросы к чистым html-страницам. Все страницы php возвращают 404. Другие статические файлы, такие как «(addr)/catalog.json», также возвращают 404. Перезапуск системы дает вам еще 4 или 5 запросов, прежде чем снова сломаться.
При посещении тех же страниц на моем компьютере все они работают отлично, несмотря ни на что. Однако посещение страниц на моем iPhone приводит к тому же результату.
Ниже приведена одна из функций Kotlin, которая вызывает страницу, веб-страницу externalsearch.php и связанный с ней файл Python, при этом некоторые особенности скрыты.
функция Android
Код: Выделить всё
fun external(view : View)
{
val searchStringLower = searchString.lowercase()
CoroutineScope(Dispatchers.IO).launch {
var connection: HttpURLConnection? = null
try {
val urlString = "${MainActivity.settings.ip}/externalsearch.php?title=${URLEncoder.encode(searchStringLower, "UTF-8")}"
val url = URL(urlString)
connection = url.openConnection() as HttpURLConnection
connection.requestMethod = "GET"
connection.connectTimeout = 5000
connection.readTimeout = 15000
val responseCode = connection.responseCode
if (responseCode == HttpURLConnection.HTTP_OK) {
val response = connection.inputStream.bufferedReader().use { it.readText() }
val json = Json { ignoreUnknownKeys = true }
val results: List = json.decodeFromString(response)
lifecycleScope.launch(Dispatchers.Main) {
val adapter = ExternalItemAdapter(this@SearchActivity, results, 0)
searchGrid.adapter = adapter
}
} else {
println("Error: $responseCode")
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
connection?.disconnect()
}
}
}
Код: Выделить всё
Код: Выделить всё
import sys
import json
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.firefox.service import Service
from bs4 import BeautifulSoup
from threading import Lock
if len(sys.argv) < 2:
print(json.dumps({"error": "Missing title parameter"}))
sys.exit(1)
title = sys.argv[1]
url = f"(url)"
options = webdriver.FirefoxOptions()
options.add_argument("--headless")
service = Service('/usr/local/bin/geckodriver')
driver = webdriver.Firefox(service=service, options=options)
results = []
try:
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
...
Scraping code
...
except Exception as e:
print(json.dumps({"error": str(e)}))
finally:
driver.quit()
print(json.dumps(results))
Подробнее здесь: https://stackoverflow.com/questions/798 ... ted-visits
Мобильная версия