Получение скрипта JS с веб-сайта с использованием Python3 - PullRequest
1 голос
/ 19 января 2020

Я бы хотел почистить сайт для его "сырого" JavaScript кода. Например, если бы я очистил этот веб-сайт. Я бы получил строку, содержащую:

enter image description here

Это лишь малая часть существующего JS в данной ссылке, но я бы хотел получить весь JS в строке или массиве строк.

Я пробовал разные подходы для получения этих данных: используя requests и selenium. Кажется, что простая загрузка HTML веб-сайта не работает, так как теги сценария не загружаются.

Используя selenium, я надеялся, что это сработает:

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

url = "https://www.udemy.com"

driver = webdriver.Chrome()
driver.get(url)

wait = ui.WebDriverWait(driver, 10) 
results = wait.until(EC.visibility_of_all_elements_located((By.TAG_NAME, "script")))

print(results)

Затем, используя results, я мог бы получить строку, но она не работает.

Другой пример для блоков JS Scripts, которые я хотел бы получить:

enter image description here

Красный прямоугольник указывает JS Scripts, как вы можете видеть это много, и я хотел бы получить его в «сыром» виде (не выполнять его).

Мой вопрос: как мне получить «сырой» скрипт JS в строковом формате? и каков наиболее эффективный (по времени) способ сделать это?

1 Ответ

1 голос
/ 20 января 2020

Вы ищете .get_attribute('innerHTML'). Вы также не хотите использовать visibility_of_all_elements_located, так как вы ищете что-то, что никогда не будет видно.

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

url = "https://www.udemy.com"
driver = webdriver.Chrome()
driver.get(url)

#wait = ui.WebDriverWait(driver, 10) 
#results = wait.until(EC.visibility_of_all_elements_located((By.TAG_NAME, "script")))

wait = WebDriverWait(driver, 10)
script_tag = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//script")))
innerHTML_of_script_tag = []
for script in script_tag:
    innerHTML_of_script_tag.append(script.get_attribute('innerHTML'))
    print(script.get_attribute('innerHTML'))
    print("################################################################")

print("---------------------------------------------------------------------")
print("---------------------------------------------------------------------")
print(innerHTML_of_script_tag)
...