当前位置: 首页 > 知识库问答 >
问题:

如何让Python抓取JavaScript文件生成的网页

郭元凯
2023-03-14

我有一个网站,我想自动执行一些操作,但页面是由2个JavaScript文件生成的,在html中定义如下:

<script src="/build/runtime.js"></script><script src="/build/app.js"></script>

运行时。js大约有70行代码和应用程序。js大约有4万行。。。我不知道如何阅读代码,因为我不懂任何JavaScript,我的Pyton知识也不过是一点点而已;)

我想分享这个特定的网站,但这个页面是在登录之后的。因此,我已经设法使用两种不同的方法进入页面,但在JS生成的下一个页面中找不到按下按钮的方法。

方法1-请求

import requests
from bs4 import BeautifulSoup

# Site & creds
LOGIN_URL = 'https://website.com/login'
USERNAME = 'user'
PASSWORD = 'pass'

# Pretend to be browser
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
# Start session
session = requests.session()
# Get login page
response = session.get(LOGIN_URL, headers=headers, verify=False)
# Get csrf token
soup = BeautifulSoup(response.content, 'html.parser')
csrf_token = (soup.find(id="login_form__token")["value"])
# Set creds with csfr token
payload = {
    'login_form[username]': USERNAME,
    'login_form[password]': PASSWORD,
    'login_form[login]': '',
    'login_form[_token]': csrf_token
}
# Login & do something else with cookies I don't understand
response = session.post(LOGIN_URL, data=payload, verify=False)
response = session.get('https://website.com/pageIWant', verify=False)

soup = BeautifulSoup(response.content, 'html.parser')
print(soup.prettify())

方法2-硒

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

options = Options()
options.headless = True
options.add_argument("--window-size=1920,1200")
options.add_argument('--disable-gpu')
options.add_argument('--disable-software-rasterizer')

driver = webdriver.Chrome(options=options, executable_path='chromedriver.exe')
driver.get("https://website.com/login")

driver.find_element_by_id("login_form_username").send_keys('user')
driver.find_element_by_id("login_form_password").send_keys('pass')
driver.find_element_by_id("login_form_login").click()

driver.get("https://website.com/pageIWant")

html = driver.page_source
print(html)

所以我认为方法2会让事情变得更容易,但几乎卡在了同一个点上。我想要生成的页面包含我需要按下以访问下游页面的按钮。阅读了很多关于访问元素的内容,但在这个40k的JS jibberish中看不到任何内容。从哪里开始比较好?

共有1个答案

锺离赤岩
2023-03-14

“从哪里开始比较好?”

不管页面是如何生成的(HTML或JS),最终您必须在Selenium中处理的是页面的活动DOM。因此,“从哪里开始”是在浏览器开发工具中检查页面的DOM,并从DOM中找出如何在Selenium中找到按钮元素。

 类似资料:
  • 问题内容: 我的问题是:如何从网抓取数据,但是直到您单击例如“ Danhsáchchậm”,该数据才显示。我已经非常认真地尝试,当您单击“ Danhsáchchậm”时,这是onclick事件,它触发了一些javascript函数js函数之一是从服务器获取数据并将其插入到标签/占位符中,并在这时,您可以使用firefox之类的方法检查数据,是的,数据会在网页上显示给用户/查看者。因此,我们又该如何

  • 问题内容: 我有一个webBrowser,在Visual Studio中有一个标签,基本上我想做的是从另一个网页中抓取一个部分。 我尝试使用WebClient.DownloadString和WebClient.DownloadFile,在JavaScript加载内容之前,它们都为我提供了网页的源代码。我的下一个想法是使用WebBrowser工具,并在页面加载后仅调用webBrowser.Docum

  • 我正试图浏览一个网站。我尝试过使用两种方法,但都没有提供完整的网站源代码,我正在寻找。我正试图从下面提供的网站URL中获取新闻标题。 URL:"https://www.todayonline.com/" 这是我尝试过但失败的两种方法。 请帮忙。我试着抓取其他新闻网站,这要容易得多。谢谢你。

  • 问题内容: 我需要用python抓取网站。我使用urlib模块获取了源html代码,但是我还需要抓取由javascript函数(包含在html源代码中)生成的html代码。该功能在站点中的作用是,当您按下按钮时,它会输出一些html代码。如何使用python代码“按”此按钮?可以帮助我吗?我用firebug捕获了POST请求,但是当我尝试在url上传递它时,出现403错误。有什么建议么? 问题答案

  • 我是python新手,正在尝试从以下站点获取数据。虽然这段代码适用于不同的站点,但我无法让它适用于nextgen stats。有人想知道为什么吗?下面是我的代码和我得到的错误 下面是我得到的错误 df11=pd。读取html(urlwk1)回溯(上次调用):文件“”,第1行,在文件“C:\Users\USERX\AppData\Local\Packages\PythonSoftwareFounda

  • 问题内容: 我正在尝试开发一个简单的网页抓取工具。我想提取没有代码的文本。我实现了这个目标,但是我发现在某些加载了的页面中,我没有获得良好的结果。 例如,如果一些代码添加了一些文本,则看不到它,因为当我调用 我得到的原始文本没有添加文本(因为在客户端执行了)。 因此,我正在寻找一些解决此问题的想法。 问题答案: 一旦安装了,请确保二进制文件在当前路径中可用: 例 举个例子,我用以下HTML代码创建