javascript - 访问网站时如何查找浏览器发出的所有 JavaScript 请求

标签 javascript python python-3.x python-2.7 python-requests

我要 LinkedIn 的内容使用请求和 bs4,但我在登录后加载页面的 JavaScript 遇到问题(我没有直接获取主页),我不想使用 Selenium
这是我的代码

import requests
from bs4 import BeautifulSoup

class Linkedin():
    def __init__(self, url ):
        self.url = url
        self.header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) "
                                 "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"}

    def saveRsulteToHtmlFile(self, nameOfFile=None):
        if nameOfFile == None:
            nameOfFile ="Linkedin_page"
        with open(nameOfFile+".html", "wb") as file:
            file.write(self.response.content)

    def getSingInPage(self):
        self.sess = requests.Session()
        self.response = self.sess.get(self.url, headers=self.header)
        soup = BeautifulSoup(self.response.content, "html.parser")
        self.csrf = soup.find(attrs={"name" : "loginCsrfParam"})["value"]

    def connecteToMyLinkdin(self):
        self.form_data = {"session_key": "myemail@mail.com",
                     "loginCsrfParam": self.csrf,
                     "session_password": "mypassword"}
        self.url = "https://www.linkedin.com/uas/login-submit"
        self.response = self.sess.post(self.url, headers=self.header, data=self.form_data)


    def getAnyPage(self,url):
        self.response = self.sess.get(url, headers=self.header)




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

likedin_page = Linkedin(url)
likedin_page.getSingInPage()
likedin_page.connecteToMyLinkdin() #I'm connected but java script still loading 
likedin_page.getAnyPage("https://www.linkedin.com/jobs/")
likedin_page.saveRsulteToHtmlFile()
我想要帮助在不使用 Selenium 的情况下传递 javascript 负载...

最佳答案

虽然在技术上可以模拟来自 Python 的所有调用,但在像 LinkedIn 这样的动态页面上,我认为它会非常乏味和脆弱。

无论如何,在您打开 LinkedIn 之前,您应该在浏览器中打开“开发人员工具”并查看流量如何。您可以过滤来自 Javascript 的请求(在 Firefox 中,过滤器称为 XHR)。

network tab in developer tools

然后,您将在代码中模拟必要/有趣的请求。好处是服务器通常将结构化数据返回到 Javascript,例如 JSON。因此,您不需要做太多的 HTML 解析。

如果您发现这种方式进展不大(这实际上取决于特定站点),那么您可能必须使用 Selenium 或其他替代方法,例如:

  • https://robotframework.org/
  • https://miyakogi.github.io/pyppeteer/ (Puppeteer 到 Python 的端口)
  • 关于javascript - 访问网站时如何查找浏览器发出的所有 JavaScript 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58867127/

    相关文章:

    javascript - 如果他们输入错误,我该如何更改表单父级的类?

    javascript - 使用 JCarousel 更改高度

    python - 在模板中包含 View

    python - 从文件树中复制随机文件

    Python 3 替换行

    javascript - 如何从全局函数访问 Angular 分量函数 - 请兼容 IE11

    javascript - 在 node.js 中需要全局范围

    python - 检查用于请求 Python/Scrapy + ProxyMesh 的 IP 地址

    python - 如何在删除重复后维护字符串列表的索引?

    python - 使用字典重新索引 pandas DataFrame (python3)