Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Python3从网站检索JS脚本_Javascript_Python 3.x_Selenium_Python Requests - Fatal编程技术网

Javascript 使用Python3从网站检索JS脚本

Javascript 使用Python3从网站检索JS脚本,javascript,python-3.x,selenium,python-requests,Javascript,Python 3.x,Selenium,Python Requests,我想刮一个网站的“原始”JavaScript代码。例如,如果我要刮网站。我将得到一个字符串,其中包含: 这只是给定链接中现有JS的一小部分,但我希望获得字符串或字符串数组中的整个JS 我尝试了不同的方法来获取这些数据:使用请求和硒。 简单地加载网站的HTML似乎不起作用,因为脚本标记似乎没有加载 使用selenium,我希望这能奏效: from selenium import webdriver from selenium.webdriver.common.by import By from

我想刮一个网站的“原始”JavaScript代码。例如,如果我要刮网站。我将得到一个字符串,其中包含:

这只是给定链接中现有JS的一小部分,但我希望获得字符串或字符串数组中的整个JS

我尝试了不同的方法来获取这些数据:使用
请求
。 简单地加载网站的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脚本块的另一个示例:

红色的矩形表示JS脚本,正如您所看到的,有很多JS脚本,我希望它以“原始”的形式出现(而不是执行它)


我的问题是:如何获得字符串格式的“原始”JS脚本?执行此操作的最有效方式(时间方面)是什么?

您正在寻找
。获取属性('innerHTML')
。您也不希望使用所有元素的可见性,因为您正在寻找一些永远不可见的东西

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)

谢谢你的回答!这段代码似乎没有在网站上找到完整的JS脚本。虽然它能够获得一些脚本,但它的一些较大部分(如问题本身中的图像所示)缺失,并且在脚本标签的
innerHTML\u以及
print
语句中为空。正是这些部分我在检索时遇到了困难。@Omer Hen当我转到时,我没有从您的屏幕截图中看到那大块javascript。在看到这段java脚本代码之前,您是否以任何方式与页面交互?我添加了另一张显示JS脚本大块的图像。给定的代码似乎并没有真正捕获所有这些。除此之外,我只需加载网站并转到Chrome提供的“inspect”选项即可查看源代码。我不执行任何特殊操作,也不与页面交互。@Omer如果是小更新,这很有趣,当我将
驱动程序.page\u source
打印到文本文件中,但不在属性
innerHTML
中时,我可以看到您正在查找的块。这就是我试图找到的解决方案。另外,当我打印
driver.page\u source
时,我没有看到JS脚本的大块,只有几个小块。